我目前正在尝试通过导航抽屉创建应用导航。所以我可以从抽屉打开片段 A1 / B1 / C1 。它们在我的容器视图中互相替换,因此backstack应该是空的。 我在抽屉选择中使用此代码:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragmentToShow, null)
.commit();
从 A1 我可以转到 A2 。应在同一容器中添加 A2 -fragment。对于这种情况:
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment, null).addToBackStack(null).commit();
在backstack中应该有1个片段。
这一切都有效,但存在问题。如果我多次打开导航抽屉并尝试再次打开 A1 , A1 来回 A2 ,然后按返回按钮从< strong> A1 我因异常而崩溃:
java.lang.IllegalStateException: Fragment already added
在onBackPressed
我的活动中,我有:
int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
if (backStackEntryCount > 0) {
getSupportFragmentManager().popBackStackImmediate();
} else {
finish();
}
backStackEntryCount不应该超过0。
你能给我一些思考点吗?我哪里错了?提前谢谢。
答案 0 :(得分:0)
我认为你在调用replace时应该为你的片段添加一个标签。如果这还不够,您可以在调用replace
之前尝试删除片段(通过其标记)另外,为什么不在第一次通话时拨打addToBackStack?