Android FragmentTabHost popBackStack()导致IllegalStateException片段已添加

时间:2014-09-28 08:55:07

标签: android fragment illegalstateexception

我的Android应用正在使用FragmentTabHost并有4个标签A,B,C,D。 我在标签A中有片段A1,我导航到标签A中的第二个片段A2, 然后我切换到标签B,然后切换回标签A. 现在我点击后退按钮,它将调用popBackStack()方法,我崩溃说IllegalStateException片段A1已经添加。 你能帮我吗? 这是我用于在主标签活动

中创建标签的代码
    mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 
    mTabHost.addTab(mTabHost.newTabSpec("profile").setIndicator("Profile"),
            ProfileFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("friends").setIndicator("Friends"),
            FriendsFragmentTab.class, null);
    mTabHost.addTab(
            mTabHost.newTabSpec("notifications").setIndicator(
                    "Notifications"), NotificationFragment.class, null);

    mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
        public void onTabChanged(String tabID) {
            mTabHost.clearFocus();
        }
    });

我使用此代码处理后退按钮,FragmentManager fragmentManager = getSupportFragmentManager();

fragmentManager.popBackStack();

1 个答案:

答案 0 :(得分:0)

看起来一般的答案是,"制作自己的后台筹码。"它可能取决于每个选项卡上片段的内容是什么,但在我的情况下,内容本身有子片段,似乎妨碍了后栈的正常工作。

我做了一些调查,发现这篇帖子来自Android团队成员:https://stackoverflow.com/a/8888195/91165

除非您的应用程序具有复杂的导航流程,并且有很多可能的后向指示,否则直接处理导航状态而不是使用堆栈可能更容易。 (在我的情况下,堆栈只会有一个"正确"返回条目 - 从所有返回子片段转到单个主片段。水平导航不是'无论如何都添加到后面的堆栈。我认为内置的后筹码会更有效率,但在看到这个后,我不这么认为。)

相关问题