我有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();
帮助克服这种情况......
答案 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的前一个实例的管理器。
现在我不知道如何解决这个问题。