【发布时间】:2014-05-13 12:23:20
【问题描述】:
我有一个包含 3 个活动的应用:
- StartActivity:处理登录内容并在一切正常时启动 MainActivity
- MainActivity:有一个 NavigationDrawer,用户可以浏览应用程序。所有内容都显示在一个 Fragment 中,由 MainActivity 启动
- SearchableActivity:MainActivity 的 ActionBar 具有启动搜索查询的搜索操作。这个查询被发送到这个活动,它只显示一些搜索结果
问题: 按下后退按钮不会返回片段历史记录,尽管我认为它应该这样做。 MainActivitiy 使用以下方法启动新的 Fragments:
protected void displayFragment(Fragment fragment) {
getFragmentManager()
.beginTransaction()
.replace(R.id.mainContentLayout, fragment)
.addToBackStack(null)
.commit();
}
应用程序不会打开最后一个 Fragment,而是打开最后一个 Activity(在 MainActivity 的情况下始终是 StartActivity)。
如果我只是想要“默认行为”而不破解自己的解决方案,我做错了什么?
我开始实现自己的解决方案来破解: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);
}
}
【问题讨论】: