我有一只猴子崩溃了,由此
java.lang.IllegalStateException: Failure saving state: FragmentB has target not in fragment manager: FragmentA
at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1561)
at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:475)
at com.acme.ParentActivity.onSaveInstanceState(Unknown Source)
基本上FragmentA加载FragmentB并调用setTargetFrament
来设置FragmentB的目标片段。
FragmentB然后简单地在其onCreate
方法中调用getTargetFrament
并在需要时挂起目标。
现在,我没有在目标片段的任何<code>onSaveInstanceState</code>调用中执行任何操作,比如将其设置为null、进行任何<code<saveFragmentInstanceState</code>、<code>putFragment</code〕等调用。问题是我应该用它做点什么吗?
提前感谢,
彼得。
**编辑1**我正在使用旧版本的支持库,并且有一种感觉,这可能会在最新版本中得到修复,如果是这样的话,将进一步测试并提供进一步的更新。但是,仍然有兴趣知道我是否应该对我目前没有做的目标片段做任何事情。
**编辑1 **用支持库8版修复(没试过其他)。
实际上,您应该做两件事来解决此问题:
1. 确保从 FragmentA 启动 FragmentB 时使用 getChildFragmentManager() 而不是 getFragmentManager()
调用getChildFragmentManager()将返回托管Fragment的FragmentManager,而getFragmentManager()将返回托管Activity的FragmentManager。使用 getChildFragmentManager() 很重要,因为您将一个片段嵌套在另一个片段中,因此父片段应该负责处理嵌套片段的任何事务。如果你使用 getFragmentManager(),你会遇到你现在遇到的问题。
2.不要使用setTargetFrament()和getTargetFrament(),使用getChildFragmentManager()时它们将不起作用
相反,请使用getParentFragment()。我相信现在Android中存在某种错误,即使您正确调用
fragmentB.setTargetFragment(fragmentA,0)
然后显示FragmentB,配置更改后,从FragmentB调用getTargetFrament()将返回自身而不是FragmentA。
匿名用户
解决方法如下:
将其放在导致问题的片段中:
@Override
public void onSaveInstanceState(final Bundle outState) {
setTargetFragment(null, -1);
...
并记得在需要时将其设置为真正的目标片段。
匿名用户
当显示来自另一个片段的 DialogFrament 并在 DialogFragment 上使用 setTargetFragment 时,我遇到了这个问题。在显示 DialogFragment 时使用 getChildFragmentManager() 解决了该问题。
- 活动A添加了片段A
- FragmentA使用ActivityA的FragmentManager添加了DialogFragmentB
- 调用dialogFragmentB.setTargetFragment(fragmentA)
- 删除FragmentA并添加FragmentA的新实例
- 与ActivityA关联的FragmentManager仍然包含DialogFragmentB,它将FragmentA的第一个实例作为目标片段
这导致调用“失败保存状态 - 目标不在片段管理器中”异常。
相关问题
- Android:在模块jefied-play-services-测量和jefied-play-services-测量-impl中发现重复类
- 在Hashmap中查找匹配的键/值对
- 如何迭代Hashmap并与同一Hashmap中的其他键进行组合以比较它们的对象
- HashCode-如果相等的对象碰巧在同一个桶中散列会发生什么?
- 如何防止对数组中类对象的重复引用?
- 如何以及何时在HashMap中完成重新散列
- 在hashmap或hashtable中重新散列的成本
- HashMap如何识别内部数组中的哪些位置包含元素?
- 当HashMap增加其大小时,HashMap中值的索引会发生什么?
- @BeforeClass在ktor测试类中不工作
- Jest vanilla JavaScript JSDOM刷新失败,切换beforeAll到before每一个后的第二次测试中断
- 玩笑未解决的promise不会失败
- 在笑话中,定义全局变量是否与在BeforeAll中定义相同?
- 使用Junit重新运行失败的测试
- 静态编程语言中@BeforeAll的正确解决方法是什么
- 线程“main”java. lang.NoClassDefFoundError中的异常:在Intellij[Spring boot]中
- 线程“main”java. lang.NoClassDefFoundError中的异常:org/apache/log4j/ProvisionNode
- 异步管道是否从服务中定义并从组件变量指向的可观察对象取消订阅?
- 结合主体时不更新在模板中的异步管道可观察
- 组件中的Angular 2重复订阅