最后一个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;
}

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

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

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

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

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

新手,不知道对否

@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,只不过他把显示的界面覆盖了一起被销毁了