我的Android应用程序管理多个片段。我看到该字段中有大量崩溃,但包含此日志行:
java.lang.IllegalStateException:失败保存状态:active XxxFragment {81e598 id = 0x7f0b0069 tag_yyy}已清除索引:-1
在Stack Overflow中搜索答案毫无结果;我似乎有很多公司想知道这个例外究竟意味着什么。深入研究异常跟踪和Android源代码,我可以看到异常来自我的主Activity保存其状态(FragmentActivity.onSaveInstanceState),并且各个Fragments正被写入Parcelable。每个片段都有一个索引(称为mIndex),它必须是非负的,但从代码中并不清楚为什么必须如此,因为mIndex永远不会在该函数中再次使用。
我不知道片段是如何进入这种状态的,或者我能做些什么。我无法在自己的测试环境中重现错误。任何人都可以解释如何避免和/或处理这个例外吗?
java.lang.IllegalStateException: Failure saving state: active has cleared index in fragment
What does active fragment has cleared index: -1 mean and how do I fix it?
答案 0 :(得分:6)
我要编辑我以前的评论,并将其作为一个实际的答案。 setRetainInstance(true)
是一只红鲱鱼。至少在我的情况下。从这里开始:http://www.localwisdom.com/blog/2013/03/android-error-java-lang-illegalstateexception-failure-saving-state-active-fragmentname/
“您很可能尝试执行片段事务,而您没有引用片段的正确实例”
当我读到这一切对我来说都是有意义的。我正在用片段做2 错误的事情。
(希望这会有所帮助。仅仅发表评论太长了。)
答案 1 :(得分:4)
在我的情况下,我忘记检查是否在分离和附加之前添加了fragment
:
if (fragment != null && fragment.isAdded()) {
getSupportFragmentManager()
.beginTransaction()
.detach(fragment)
.attach(fragment)
.commit();
}