繁体   English   中英

片段后台堆栈问题

[英]Fragment backstack issue

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

这一切都有效,但有一个问题。 如果我多次打开导航抽屉并试图再次打开A1A1A2来回然后再按下后退按钮从A1我崩溃异常:

java.lang.IllegalStateException: Fragment already added

onBackPressed我的活动我有:

    int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
    if (backStackEntryCount > 0) {
        getSupportFragmentManager().popBackStackImmediate();
    } else {
        finish();
    }

当它不应该时,backStackEntryCount大于0。

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

我认为你在调用replace时应该为你的片段添加一个标签。 如果这还不够,您可以在调用replace之前尝试删除片段(通过其标记)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM