我有2个活动,A和B。活动A由一个片段组成。对于通知单击,我使用TaskStackBuilder,将nextIntent作为B调用,将parentActivity作为A。对于nextIntent,我设置Intent.FLAG_ACTIVITY_NEW_TASK标志。

场景是,活动B在前台,通知到达,然后单击它,活动A被破坏,活动B从onCreate加载。如果我返回,则将加载活动A的onCreate,但是对于片段提交调用,将发生以下崩溃。


  致命异常:java.lang.IllegalStateException:无法执行此操作
  onSaveInstanceState之后的操作
         在android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1493)
         在android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1511)
         在android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638)
         在android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:617)


这是我提交片段的方式

  EgFragment fragment = new EgFragment();
  getSupportFragmentManager().beginTransaction().add(R.id.view, fragment).commit();


任何克服这种情况的帮助.....

最佳答案

我发现了问题。在FragmentManager中,有两个布尔值,即mStateSaved和mDestroyed。在onStop中,mSavedState将设置为true。在OnDestroy中,mDestroyed将设置为true,但mStateSaved未设置为false。

现在,当从活动A启动活动B时,A的onStop会将mStateSaved设置为true。在B中,当通知发生时,点击FLAG_ACTIVITY_NEW_TASK。这两个活动onDestroy都将被调用。现在,将调用onCreate,这将mStateSaved设置为false,但是在此之后,如果我们使用getSupportFragmentManager并提交片段,则mStateSaved将为true。

我认为getSupportFragmentManager()返回的是mStateSaved为true的先前实例的管理器。

现在我不知道如何解决这个问题。

关于android - fragment.commit()给出非法状态异常,无法在onSaveInstanceState之后执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38514292/

10-09 16:02