添加片段java.lang.IllegalStateException:在onSaveInstanceState

时间:2017-10-26 14:58:40

标签: android android-fragments fragment

在Activity中,我调用我的方法添加一个新片段:

protected void addFragment(@NonNull Fragment fragment,
                               @NonNull String fragmentTag,
                               int containerViewId, int enterAnim, int exitAnim,
                               int popEnterAnim, int popExitAnim) {
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction()
                .setCustomAnimations(enterAnim, exitAnim, popEnterAnim, popExitAnim)
                .add(containerViewId, fragment, fragmentTag);

        transaction = transaction.addToBackStack(null);             
        transaction.commit();
    }

大多数情况都很完美,但很少发生崩溃(由Crashlytics检测到):

  

致命异常:java.lang.IllegalStateException:无法执行此操作   onSaveInstanceState之后的动作          在android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2044)          在android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2067)          在android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:680)          在android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:634)          在com.compagny.ui.BaseActivity.addFragment(BaseActivity.java:1495)          在com.compagny.ui.BaseActivity.addFragment(BaseActivity.java:1472)          在com.compagny.ui.training.TrainingActivity.setupView(TrainingActivity.java:309)

我不知道为什么;你对我的调查人员有什么建议吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

活动只能在onResume和BEFORE onSaveInstanceState之后处理片段。

  • onActivityResult发生在onResume之前(不确定我为此做了什么测试,也许这个说法无效)
  • 在更改活动时,它们不在此状态(作为异步任务的回调)
  • 如果他们缩小到系统(作为异步任务的回调)