gpt4 book ai didi

android - fragment.commit() 给出 illegalStateException,在 onSaveInstanceState 之后无法执行

转载 作者:行者123 更新时间:2023-11-30 01:09:56 27 4
gpt4 key购买 nike

我有 2 个 Activity ,A 和 B。 Activity A 由一个 fragment 组成。对于通知点击,我使用 TaskStackBuilder,将 nextIntent 调用为 B,将 parentActivity 作为 A。对于 nextIntent,我正在设置 Intent.FLAG_ACTIVITY_NEW_TASK 标志。

场景是,B Activity 在前台,通知到达并且您单击它, Activity A 被销毁, Activity B 从 onCreate 加载。如果我返回,Activity A 的 onCreate 会被加载,但对于 fragment 提交调用,我会遇到以下崩溃。

Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1493) at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1511) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638) at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:617)

这是我提交 fragment 的方式

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

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

最佳答案

我发现了问题。在 FragmentManager 中,有两个 bool 值,mStateSaved 和 mDestroyed。在 onStop 中,mSavedState 将被设置为 true。在OnDestroy中,mDestroyed会被设置为true,但是mStateSaved不会被设置为false。

现在,当 Activity B 从 Activity A 启动时,A 的 onStop 将 mStateSaved 设置为 true。在 B 中,当带有 FLAG_ACTIVITY_NEW_TASK 的通知点击发生时。 onDestroy 的两个 Activity 都将被调用。现在,调用 onCreate 使 mStateSaved 为假,但在此之后,如果我们使用 getSupportFragmentManager 并提交 fragment ,mStateSaved 将为真。

我认为 getSupportFragmentManager() 正在返回上一个实例的管理器,其中 mStateSaved 为真。

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com