В чем может быть причина, даже если проверка isFinishing() все еще получает IllegalStateException: не может выполнить это действие после onSaveInstanceState

Получение 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 ответ

После onSaveInstanceState вы не можете зафиксировать транзакцию, поэтому используйте фиксацию StateLoss.

ft.commitAllowingStateLoss();
Другие вопросы по тегам