我在不同场景中收到以下消息时出现此错误:
-
活动已被破坏
-
在onSaveInstanceState之后无法执行此操作
我正在编写一个应用程序,其中两个活动互相交互 . Activity-A 使用Intent启动 Activity-B . 这个 Activity-B 类有两个片段子级 . Fragment-A 使用公共活动方法启动另一个 Fragment-B .
public void beginTransaction(ID id, Bundle bundle) {
Fragment fragment = getFragmentItem(id);
// In case this activity was started with special instructions from an Intent,
// pass the Intent's extras to the fragment as arguments
fragment.setArguments(bundle);
// Add the fragment to the 'fragment_container' FrameLayout
fragmentManager.beginTransaction()
.add(R.id.fragment_container, fragment).commitAllowingStateLoss();
}
Fragment-B 每次调用 finish() 来杀死Activity-B因此控制再次回到 Activity-A . 同样的过程重复 . 做了2-3次我得到了:
java.lang.IllegalStateException:在onSaveInstanceState E / AndroidRuntime(9008)之后无法执行此操作:在android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1354)E / AndroidRuntime(9008):在android . support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1372)
所以为了避免它,我按照https://stackoverflow.com/a/10261438/2624806开始给我
Java.lang.IllegalStateException:活动已被销毁E / AndroidRuntime(9235):在android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1376)E / AndroidRuntime(9235):在android.support.v4 .app.BackStackRecord.commitInternal(BackStackRecord.java:595)
任何建议我在这里缺少什么 .
GOT IT 我得到了解决方案..在添加片段的事务中发生了错误 . 我使用 .add 代替使用 .replace (因为我要求不维护堆栈)并使用 commitAllowTransaction 提交它 . 我也阅读了http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html,看起来我所做的事情可能代价高昂,但对于正常的片段交易,提及解决方案的工作很棒 .
1 回答
由于声誉较低,我无法对您的问题发表评论 . 我认为这是改变片段的公共方法 .
每次将片段添加到活动时,在此方法中 . 因此,如果您是第一次添加片段,这将正常工作,但如果是第二个片段,您应该使用替换不添加
我认为这样做之后你不应该面对这个问题 . 或者您可以对第一个和第二个片段使用“替换” . 我希望这能帮到您 .