基于用户的交互,我将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;
}
但是这样的话会影响返回键的功能。请求大家给与指点,谢谢!
return true;
改为return false;
这样表明你没有处理键盘响应,当返回栈是空的时候,activity就会关闭。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,只不过他把显示的界面覆盖了一起被销毁了