当前位置: 首页 > 知识库问答 >
问题:

IllegalStateException(在onSaveInstanceState之后无法执行此操作)

孔理
2023-03-14
    null
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();
    }

java.lang.IllegalStateException:在onSaveInstanceState 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)

任何建议我在这里遗漏了什么。

得到了它,我得到了解决方案…这是错误发生在事务中添加片段。我使用。add来代替use.replace(这是我不维护堆栈的要求),并使用commitAllowTransaction来提交它。我也阅读了http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html,似乎我所做的可能代价很高,但对于普通的片段事务,提到解决办法是很好的。

共有1个答案

孔欣可
2023-03-14

由于声誉较低,我无法对你的问题发表评论。我假设这是您更改片段的公共方法。

public void beginTransaction(ID id, Bundle bundle)

在此方法中,每次将片段添加到活动中。因此,如果您第一次添加片段,这将很好地工作,但在第二个片段的情况下,您应该使用替换而不是添加

    fragmentManager.beginTransaction()
    .replace(R.id.fragment_container, fragment).commitAllowingStateLoss();

我想做了这件事之后你就不应该面对这个问题了。或者可以对第一个和第二个片段都使用'replace'。我希望这能帮到你。

 类似资料: