【发布时间】:2016-12-08 16:58:27
【问题描述】:
要重现,请获取SSCCE Android Project on Github 和:
触摸汉堡以显示导航菜单
选择员工
选择员工
触摸返回按钮
触摸概览按钮
从列表中选择应用程序
触摸汉堡显示导航菜单
选择员工
选择一个员工 => IllegalStateException
java.lang.IllegalStateException: 之后无法执行此操作 onSaveInstanceState 在 android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1538) 在 android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1556) 在 android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:696) 在 android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:662) 在 example.com.replacefragments_onitemclick.fragments.FragmentChange.onFragmentChange(FragmentChange.java:88)
fragmentTransaction.commit(); // IllegalStateException: FragmentChange.java:88
异常的原因很清楚:使用 replace 语句,它试图替换附加到现在不存在的 Activity 实例的片段。
将onSaveInstanceState() 覆盖为suggested here 无效。
许多问题建议使用commitAllowingStateLoss()。它不能解决问题,而且显然是一种黑客攻击。
此外,还有一些答案说要保留对旧 Activity 的引用。这似乎不对。
如何防止这个异常?
【问题讨论】:
标签: android illegalstateexception onsaveinstancestate