Когда-нибудь получить IllegalStateException: не может выполнить это действие после onSaveInstanceState после проверки в отделке
Если бы это было ранее и решено путем проверки активности isFinishing или onSaveInstanceState уже был вызван.
Но иногда это все же происходит после того, как он прошел проверку. Это просто список, и при нажатии на элемент откроется еще один фрагмент, чтобы показать подробности.
В обработчике действия isFinishing() и то, был ли вызван onSaveInstanceState, проверены и в порядке, но ft.commit() все еще вызывает IllegalStateException.
Как это могло произойти, так как список все еще на дисплее? Что еще можно использовать для предотвращения этого?
опять же, в большинстве случаев он работает нормально, но иногда на этой линии видны сообщения о сбоях.
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.zeta.MainActivity.showMessageDetailsFragment(MainActivity.java:4522)
at com.zeta.messagelist.ListFragment.onListItemClick(ListFragment.java:1945)
at android.support.v4.app.ListFragment$2.onItemClick(ListFragment.java:60)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3073)
at android.widget.AbsListView$3.run(AbsListView.java:3910)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
@Override
protected void onSaveInstanceState(Bundle outState) {
mInSaveInstanceState = true;
super.onSaveInstanceState(outState);
}
private void showMessageDetailsFragment(MessageContext messageContext) {
if ((!mInSaveInstanceState) && !isFinishing()) {
MessageDetailsFragment detailsFragment = new MessageDetailsFragment(messageContext);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.details_fragment_holder, detailsFragment, "DETAILS_FRAGMENT");
ft.addToBackStack("DETAILS_FRAGMENT");
ft.setCustomAnimations(R.anim.hold, FragmentTransaction.TRANSIT_NONE,
R.anim.slide_left_in, FragmentTransaction.TRANSIT_NONE);
ft.show(detailsFragment);
ft.commit(); //<=== java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState