当前位置: 首页 > 知识库问答 >
问题:

Android FragmentTabHost popBackStack()导致已添加非法状态异常片段

冯曾笑
2023-03-14

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

碎片管理器。popBackStack();

共有1个答案

段干宜
2023-03-14

看起来一般的答案是,“做你自己的备份。”这可能取决于每个选项卡上片段的内容,但在我的例子中,内容本身有子片段,这些子片段似乎阻碍了后堆栈的正常工作。

我做了一些研究,从Android团队的一位成员那里找到了这篇帖子:https://stackoverflow.com/a/8888195/91165

除非你的应用程序有一个复杂的导航流,有很多可能的反向方向,否则直接处理导航状态可能比使用堆栈更容易。(在我的例子中,堆栈只会有一个“正确”的反向条目——从所有子片段返回到一个主片段。无论如何,水平导航没有添加到后堆栈中。我认为内置的后堆栈会更有效,但是在看到这个之后,我不这么认为。)

 类似资料:
  • 在spring boot应用程序中,当将一个对象索引到es中时,我会遇到以下异常。 这个类有两个静态字段和两个类型为的实例变量,还有一个视图方法,其中一个是被重写的toString。 映射如下。没有映射,索引就可以正常工作。但是,由于对象可以为null,因此需要配置null_值。 我试图将替换为,但是,文档声明:“一个字符串值,它被展平对象字段中的任何显式空值替换。默认值为null,这意味着空si

  • 我正在尝试使用下面的快速加载API 连接…等是完美的。 我确切地知道它在哪里失败 例外情况是 < code >线程“main”Java . lang . illegalstateexception中出现异常:示例失败。 这是我试图上传的表格。它是格式,当我通过记事本打开它时,它看起来像这样 为什么我会得到这个异常?我该如何改进?据我理解问题是< code > pstmtfld . setascii

  • 问题内容: 如何将轮询线程传递给另一个线程进行处理。程序执行在具有主方法和线程池的控制器类中: 主类控制器 具有轮询类的线程的方法 具有proc类的线程的方法 轮询类和控制器类 我的任务和问题是: 1.控制器应同时处理轮询器和处理器线程,并且应仅调用轮询器和处理器线程 2.现在我的问题是如何使轮询线程等待3秒并并行通知处理器。 我得到如下错误: 这里如何实现异步处理? 问题答案: 你需要阅读的东西

  • 问题内容: 这是我的用法- 另外,我在http GET周围放置了一个finally块- 这是我的堆栈跟踪- 我正在使用Quartz计划监视Http端点的工作。这是我的连接池配置 Maven依赖..工件版本 编辑 -好吧,通过不关闭finally块中的CloseableHttpClient,问题解决了。有人能说出为什么这样吗? 如果关闭客户端,为什么连接池会关闭? 是上面的closeablehttp

  • 这是我如何使用它 - 此外,我已经在超文本传输协议GET周围放置了一个最终块- 这是我的堆栈跟踪- 我正在使用Quartz来安排监控Httpendpoint的工作…这是我的连接池配置 马文依赖..神器版本 编辑-嗯,这个问题通过在最后一个块中不关闭CloseableHttp客户端而得到解决…有人能告诉我为什么它会这样吗?如果我关闭客户端,为什么连接池会关闭? 上面的closeablehttpcli

  • 我的应用程序处于生产状态,它支持从API 8到23。我最近更新了应用程序,使其具有使用导航抽屉的材料设计。此版本支持从 14 到 23。 该应用程序在API 21[Lollipop]及以上版本上运行良好,但有4.4“java illegalstateexception android.support.v7.app.AppCompatDelegateImplV7.createSubDecor”的崩溃