在setMap上的onSaveInstanceState之后无法执行此操作

时间:2017-06-02 06:30:45

标签: android

我正在使用SupportMapFragment,并且在提交时它会因非法状态异常而崩溃。 这是下面的代码:

  mSupportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.branch_mp_view);
        if (mSupportMapFragment == null) {
            FragmentManager fragmentManager = getChildFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            mSupportMapFragment = SupportMapFragment.newInstance();
            fragmentTransaction.replace(R.id.branch_mp_view, mSupportMapFragment).commit();
        }

        if (mSupportMapFragment != null) {
            mSupportMapFragment.getMapAsync(this);
        }

日志:

Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
       at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1538)
       at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1556)
       at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:696)
       at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:662)
       at com.android.myapp.ui.branch_master.MyFragment.setMap(MyFragment.java:1346)
       at com.android.myapp.ui.branch_master.MyFragment.handleSuccessBranchDetail(MyFragment.java:3267)
       at com.android.myapp.ui.branch_master.MyFragment$1.onResponse$230aa0b4(MyFragment.java:200)
       at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
       at android.os.Handler.handleCallback(Handler.java:815)
       at android.os.Handler.dispatchMessage(Handler.java:104)
       at android.os.Looper.loop(Looper.java:194)
       at android.app.ActivityThread.main(ActivityThread.java:5637)
       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:959)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

请帮助,我无法重现它,但我看到偶然出现崩溃的崩溃。

1 个答案:

答案 0 :(得分:0)

看起来你试图在apicall完成后显示mapFragment。在此期间,用户可能已经关闭了应用程序,或者转到了不同的屏幕。当发生这种情况时,您的活动或片段会暂停。暂停后,再也无法替换片段。您可以通过检查您的ap是否仍在前台来防止这种情况。例如,当调用onResume时,可以将名为foreground的布尔值设置为true,并在调用onPause时将其设置为false。您现在可以使用此变量来查看是否可以显示您的片段。