android - 弹出堆栈抛出 "Fragment Already Added"异常

标签 android android-fragments back-stack

我一直在尝试解决有关后台管理的最奇怪的问题。

目标是有如下逻辑( fragment 用字母A,B,C表示):

A -> B, B -> C ,当按下 backPressed 时,C -> A

因为 C 可以是不同的 fragment ,当在 C 和 backPressed 中时, fragment B 永远不会出现,我将转换 A->B 添加到 backstack 并且 B->C 没有添加,只是用 C 替换 B,所以当我按 backPress,C 转到 A。

这在第一次时完美运行 - 行为符合预期,但当我连续第二次尝试时,应用程序崩溃了:

getSupportFragmentManager().popBackStackImmediate()

,抛出异常:

java.lang.IllegalStateException: Fragment already added: FragmentC
...

我已经尝试用 getSupportFragmentManager().popBackStack 替换,但只是在几纳秒后才抛出错误。

有什么原因可以解释为什么在尝试从堆栈中弹出 fragment 时会抛出添加它的错误吗?关于如何解决这个问题的任何想法?

提前致谢

最佳答案

它不是由于返回堆栈弹出而抛出异常,而是由于 (A) 已被附加而抛出异常。确保在转到 B 和 C 时使用删除或替换,以防止 A 处于添加/附加状态。

关于android - 弹出堆栈抛出 "Fragment Already Added"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58009339/

相关文章:

android - 无法按标签找到 fragment

Android ViewPageAdapter,每个选项卡都有一个单独的后台堆栈

java - 下面的代码有什么问题?

android - 当应用程序对象被系统杀死时清除返回堆栈

android - 当我使用 actionbar searchview android 进行搜索时,searchfragment 多次添加到后退堆栈

android - 即使在开始新 Activity 并清除返回堆栈后仍保留根 Activity

java - 除了 Jsoup 还有其他解析器吗?

android - 如何解决对重载定义的不明确引用

android - Fabric.io 中的 API key 和构建 secret 有什么区别?

android - 为 Google Play 和 Amazon Store 开发安卓应用