fragment.commit()给出了illegalStateException,在onSaveInstanceState

时间:2016-07-21 21:01:24

标签: android android-fragments

我有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();

帮助克服这种情况......

1 个答案:

答案 0 :(得分:0)

我发现了问题。在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的前一个实例的管理器。

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