2 csh 34 csh_34 于 2012.10.31 10:48 提问

最后一个fragment出现时处理返回键的问题

基于用户的交互,我将Fragments动态的添加到activity中 。当按下返回键, Fragment片段会出现。然而当我按下第一个加载到堆栈中的Fragment中的返回键时,Activity会显示了一个空的布局。我想让这个Activity调用finish()方法然后消失。我试着使用以下代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    super.onKeyDown(keyCode, event);
    if(keyCode == KeyEvent.KEYCODE_BACK){
        if(getFragmentManager().getBackStackEntryCount()==0){
            finish();
            return true;
        }
    }
    return true;
}

但是这样的话会影响返回键的功能。请求大家给与指点,谢谢!

6个回答

O_Casper_ne
O_Casper_ne   2012.10.31 17:09
已采纳
  1. 把第二个return true;改为return false;这样表明你没有处理键盘响应,当返回栈是空的时候,activity就会关闭。
  2. getBackStackEntryCount()==0改为getBackStackEntryCount()==1
llwdslal
llwdslal   2013.06.17 17:56

第一个添加的Fragment也就是按返回键时的最后一个Fragment
在添加到Activity的时候 不要调用 FT(事物)的添加到Back堆栈方法就好了。

znl_12
znl_12   2012.11.01 10:04

你在哪里添加你的第一个fragment?不要把这个事务添加到你想要实现功能的返回栈中。

qhs1573
qhs1573   2015.08.03 11:45

楼主这个这问题你是怎么解决的啊,我现在也遇到了最后一个fragement是按返回键就空白页的,按照上面的方法测试过了并没有什么用的

ycyz311
ycyz311   2015.10.12 20:55
bt_gohome.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // 获取fragment回退栈的节点数量
            while (manager.getBackStackEntryCount() != 0) {
                activity.onBackPressed();
                activity.finish();
            }
        }
    });

新手,不知道对否

baidu_34834776
baidu_34834776   2016.04.29 16:07

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
if(keyCode == KeyEvent.KEYCODE_BACK){
if(manager.getBackStackEntryCount()==1){
this.finish();
return true;
}
}
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();


    if (id == R.id.action_settings) {

        return true;
    }
    if (id == android.R.id.home){

        onBackPressed();
        return true;
    }

    return super.onOptionsItemSelected(item);

}

@Override
public void onBackPressed() {
    if(manager.getBackStackEntryCount()==1){
        this.finish();

    }
    super.onBackPressed();
}
    我的是这样解决的 ,因为我有toolbar的返回按钮所以处理了两个事件,这样功能却是实现了 不会出现空白页了 ,不过点击返回的时候,仔细看销毁的是返回的那个fragment,只不过他把显示的界面覆盖了一起被销毁了
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!