【问题标题】:Android FragmentTabHost popBackStack() caused IllegalStateException Fragment already addedAndroid FragmentTabHost popBackStack() 导致 IllegalStateException Fragment 已添加
【发布时间】:2014-11-22 20:42:37
【问题描述】:

我的 Android 应用正在使用 FragmentTabHost,并且有 4 个选项卡 A、B、C、D。 我在带有片段 A1 的标签 A 中,我导航到标签 A 中的第二个片段 A2, 然后我切换到选项卡 B,然后切换回选项卡 A。 现在我单击将调用 popBackStack() 方法的后退按钮,我得到了崩溃,说 IllegalStateException Fragment A1 已经添加。 你能帮我吗? 这是我用来在 Main Tab Activity 中创建标签的代码,

    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();

【问题讨论】:

  • 请发布您的代码!
  • 我刚刚更新了我的帖子。谢谢

标签: android fragment illegalstateexception


【解决方案1】:

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

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

除非您的应用程序具有复杂的导航流程和许多可能的反向方向,否则直接处理导航状态可能比使用堆栈更容易。 (在我的情况下,堆栈只会有一个“正确”的后退条目——从 all 子片段返回到单个主片段。水平导航无论如何都没有添加到后堆栈. 本来以为内置回栈会更有效率,但是看到这个后,我不这么认为了。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多