繁体   English   中英

重新打开和替换片段时Android应用程序崩溃

[英]Android app crashes when reopening and replacing fragment

对于我正在编写的当前应用程序,我已经实现了导航抽屉(具有向后兼容性的默认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(); 不应该再造成崩溃。 但是,您需要承担您的状态信息将在片段上丢失的风险。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM