2

获取 IllegalStateException:添加片段时,在活动中的 onSaveInstanceState 之后无法执行此操作。它在大多数情况下都有效,但看到有时会发生这种 IllegalStateException。

在检查活动是否仍然存在后完成添加片段:

if ((!mInSaveInstanceState) && !isFinishing())

为什么仍然会发生“IllegalStateException:onSaveInstanceState 后无法执行此操作”的任何解释?

代码片段是打击。

活动中:

@Override
protected void onSaveInstanceState(Bundle outState) {
    mInSaveInstanceState = true;
    … …
    super.onSaveInstanceState(outState);
}

显示新片段的片段:

void addNewFragment () {
    if ((!mInSaveInstanceState) && !isFinishing()) {
        FragmentManager fm = getSupportFragmentManager();
        String fragmentName = "NEW_ADDED_FRAGMENT";
        int holderId = R.id.new_fragment_holder;
        NewFragment theNewFrgmt = new NewFragment();

        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(holderId, theNewFrgmt, fragmentName);
        ft.addToBackStack(fragmentName);


        ft.setCustomAnimations(R.anim.hold, 0, R.anim.slide_left_in, 0);
        ft.show(theNewFrgmt);
        ft.commit();  //<=== it throws at here
    }
}

迷恋;撞车;崩溃

Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1832)
    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1850)
    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:643)
    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:603)
    at com.zone.ui.MainActivity.addNewFragment(MainActivity.java:4522)
    at com.zone.ui.MainActivity.access$000(MainActivity.java:262)
    at com.zone.ui.MainActivity$8.onEvent(MainActivity.java:591)
    at com.zone.ui.MainActivity$8.onEvent(MainActivity.java:587)
    at com.zone.dataModel.EventManager.dispatchEvent(EventManager.java:96)
    at com.zone.ui.tasklist.TaskListFragment$8.run(TaskListFragment.java:422)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5343)
    at java.lang.reflect.Method.invoke(Method.java)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
4

1 回答 1

0

在 onSaveInstanceState 之后你不能提交事务,所以使用 StateLoss 提交。

ft.commitAllowingStateLoss();
于 2017-05-11T13:37:59.993 回答