gpt4 book ai didi

android - popBackStack 和 commitAllowingStateLoss

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:02 32 4
gpt4 key购买 nike

我在 Activity 的 onCreate() 方法中调用了 popBackStack(),但是我得到了异常:

Caused by java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

android.app.FragmentManagerImpl.checkStateLoss (FragmentManager.java:1428)
android.app.FragmentManagerImpl.enqueueAction (FragmentManager.java:1446)
android.app.FragmentManagerImpl.popBackStack (FragmentManager.java:572)

我知道解决此异常的一种方法是调用 commitAllowingStateLoss,前提是您可以接受对 UI 和最终用户的影响。

问题是,popBackStack 没有提交调用。有没有其他方法可以调用 popBackStack 并允许状态丢失?

我应该说,我在 onPostResume 中执行此操作并收到此异常。

最佳答案

经过大量研究,我得出的结论是,当 Activity 恢复时,无法在 Android 上操作 fragment 。根据提到的博客文章,我已经尝试过 onPostResume() 和 onResumeFragments() 从后台弹出 fragment ,并且在发布到生产环境时都导致间歇性崩溃。

这种现实的缺点是,例如,如果您想显示关卡 fragment 的结尾,然后是插页式广告,然后是下一个级别(作为与关卡 fragment 结尾不同的 fragment ),那么它不可能使用 fragment 。

对于我个人的情况,我从我的应用程序中删除了所有 fragment 。我一直在使用布局,因为在 XML 中编辑 UI 很有用,但 Fragment 生命周期在其当前状态下不可用,所以我推出了自己的“fragment ”子系统,但更好,因为它可以从 Activity onResume 中进行操作。

我希望有一天 Google 会解决这个问题,因为它让 Android 开发变得非常不愉快。无论如何,如果有人需要使用 fragment ,但不喜欢你总是会遇到的典型 onSaveInstanceState 异常,这是我的“GameScreen”实现(它就像一个 fragment ,只是更好)

/**
* GameScreen
*/
public class GameScreen {

private int id;
private View view;
private ViewGroup viewGroup;
protected MainActivity mainActivity;

public GameScreen(MainActivity mainActivity, int id) {
this.mainActivity = mainActivity;
this.id = id;
}

public void create(LayoutInflater layoutInflater, ViewGroup viewGroup) {
this.viewGroup = viewGroup;
view = layoutInflater.inflate(id, viewGroup, false);
viewGroup.addView(view);
}

public void show() {
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View v = viewGroup.getChildAt(i);
if (v != view) {
v.setVisibility(View.INVISIBLE);
}
}

view.setVisibility(View.VISIBLE);
}
}

关于android - popBackStack 和 commitAllowingStateLoss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42498970/

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