在不同的场景中,我收到了以下消息,从而得到了这个错误:
我正在编写一个应用程序,其中两个活动相互作用。活动-A启动活动-B使用意图。这个活动-B类有两个片段子类.片段-A使用公共活动方法启动另一个片段-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();
}每次调用finish()来杀死活动时,-B片段-B因此控制移回活动-A再次。同样的过程重复。在做了2-3次之后,我得到:
java.lang.IllegalStateException:无法在android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1354) E/AndroidRuntime( 9008): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1354) E/AndroidRuntime( 9008):at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1372)后执行此操作
所以为了避免它,我跟随https://stackoverflow.com/a/10261438/2624806,它开始给我
Java.lang.IllegalStateException:活动已被破坏, E/AndroidRuntime( 9235):at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1376) E/AndroidRuntime( 9235):at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
有什么建议吗我在这里错过了什么。
得到IT--我得到了解决方案-- ..it在事务中添加片段是错误的。我使用的是.add,而不是使用.replace (作为不维护堆栈的要求),并使用提交堆栈。我也读过http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html,似乎我所做的代价很高,但是对于普通的片段事务来说,提到工作很棒。
发布于 2014-08-28 15:23:59
因为我不能评论你的问题,因为声誉点较少。我想这是您更改片段的公共方法。
public void beginTransaction(ID id, Bundle bundle)在此方法中,每次向活动中添加片段时。因此,如果您第一次添加片段,这会很好,但是对于第二个片段,您应该使用替换而不是添加。
fragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment).commitAllowingStateLoss();我认为这样做后,你不应该面对这个问题。也可以对第一段和第二段使用“替换”。我希望这能帮到你。
https://stackoverflow.com/questions/25486656
复制相似问题