我有一个包含3项活动的应用程序:
问题: 按下后退按钮不会返回片段历史记录,但我认为应该这样做。 MainActivitiy使用以下方法启动新碎片:
protected void displayFragment(Fragment fragment) {
getFragmentManager()
.beginTransaction()
.replace(R.id.mainContentLayout, fragment)
.addToBackStack(null)
.commit();
}
应用程序只打开最后一个活动(在MainActivity的情况下始终是StartActivity),而不是打开最后一个Fragment。
如果我只是想要"默认行为"我做错了什么?没有破解自己的解决方案?
我开始实现一个自己的黑客解决方案:MaiNActivity覆盖onBackPressed函数并手动弹出堆栈中的最后一个Fragment。当计数太小时,我完成了应用程序,因此我的StartActivity不再被调用。但是,如果我想从SearchableActivity返回,那么这不起作用。
@Override
public void onBackPressed() {
FragmentManager fragmentManager = getFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
if (count > 0) {
fragmentManager.popBackStackImmediate();
} else {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
}
答案 0 :(得分:0)
覆盖onKeyDown()并处理事件
答案 1 :(得分:0)
实际上,这很容易。如果FragmentManager backstack的计数小于1,我可以简单地调用
super.onBackPressed()
只会弹出后台堆栈中的下一个活动。这样,当用户按下后退按钮时,只要有片段就会弹出片段,当片段堆栈为空时,我会开始弹出活动。