首页 文章

甚至可能是因为检查isFinishing()它仍然会得到IllegalStateException:在onSaveInstanceState之后无法执行此操作

提问于
浏览
1

获取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)

1 回答

  • 0

    在onSaveInstanceState之后,您无法提交事务,因此请使用StateLoss提交 .

    ft.commitAllowingStateLoss();
    

相关问题