片段后台堆栈问题

时间:2015-02-18 14:25:14

标签: java android android-fragments navigation-drawer

我目前正在尝试通过导航抽屉创建应用导航。所以我可以从抽屉打开片段 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。

你能给我一些思考点吗?我哪里错了?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为你在调用replace时应该为你的片段添加一个标签。如果这还不够,您可以在调用replace

之前尝试删除片段(通过其标记)

另外,为什么不在第一次通话时拨打addToBackStack?