gpt4 book ai didi

java - Android 应用程序在重新打开和替换 fragment 时崩溃

转载 作者:太空狗 更新时间:2023-10-29 15:07:57 27 4
gpt4 key购买 nike

对于我当前正在编写的应用程序,我已经实现了一个抽屉导航(具有向后兼容性的默认 Android 方式)。因此,您从抽屉导航中选择一个菜单元素,然后我执行此操作(addPreviousToBackStack 在测试中始终为 false):

private void replaceFragment(final Fragment fragment, final boolean addPreviousToBackStack) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.activity_main_fragment_container, fragment);
if(addPreviousToBackStack) {
fragmentTransaction.addToBackStack(fragment.getTag());
}
fragmentTransaction.commit();
currentFragment = fragment;
}

所以当我启动应用程序时,它就像一个魅力。然后我使用后退按钮关闭应用程序。如果我然后重新打开应用程序(无论如何:通过长按主页按钮或通过快捷方式)应用程序从初始屏幕开始(调用 onCreate)然后我打开抽屉导航并选择一个菜单项并且应用程序崩溃.

这是我的异常:“java.lang.IllegalStateException:在 onSaveInstanceState 之后无法执行此操作”

它恰好发生在我所在的地方

fragmentTransaction.commit();

我不知道为什么我会在重新打开应用程序时收到此消息,而不是在最初打开应用程序时收到此消息。有什么线索吗??

最佳答案

我不确定您的用例的上下文是什么,但是调用 fragmentTransaction.commitAllowStateLoss(); 应该不会再导致崩溃了。但是,您需要承担您的状态信息在 fragment 上丢失的风险。

此外,这一行 currentFragment = fragment; 在我看来是内存泄漏的原因。如果 Android 想要清理 fragment ,您将通过保持对该 fragment 的强引用来阻止它。不要使用它...

关于java - Android 应用程序在重新打开和替换 fragment 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19998540/

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