我想在actionBar
中实现主页/向上按钮。我有一个简单的应用程序,有一个活动 (A) 和两个片段(设置 (B) 和关于 (C))。
在我发现使用popBackStack
的其他问题中,但这不是解决方案,因为如果用户将 A> B> C> B> C,后退按钮变为 C> B> C> B> A(这是正确的行为吗?
switch (item.getItemId()){
case R.id.action_settings:
// get preferences fragment
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new PrefFragment())
.addToBackStack(null)
.commit();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
return true;
case R.id.action_about:
// get about fragment
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new AboutFragment())
.addToBackStack(null)
.commit();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
return true;
case android.R.id.home:
// clear back stack and show home screen?
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
return true;
}
我需要最后一个案例来隐藏任何片段(显示主活动窗口)并清除我的后堆栈 - 回家,而不是回来。我怎样才能做到这一点?
我使用 AppCompat 库。
试试这个:
private void clearBackStack() {
FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
或致电
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
表单文档POP_BACK_STACK_INCLUSIVE为
popBackStack(String, int)和 popBackStack(int, int) 的标志:如果设置, 并且已提供后退堆栈条目的名称或 ID,然后全部 匹配的条目将被使用,直到不匹配的条目 找到或到达堆栈底部。