片段替换后调用onSaveInstanceState

问题

onSaveInstanceState在设备旋转时针对已在片段事务中被替换的片段调用。 这导致IllegalStateException异常,并显示消息“内容视图尚未创建。

研究

我发现了以下两个看起来最相关的答案

在堆栈中使用onSaveInstanceState和碎片?

前一个片段的onSaveInstanceState称为当前片段的on-orientation

我已经尝试过了

在回答第二个问题之后,我从片段事务中删除了addtobackstack,但仍然收到错误消息。

我读了第一个问题的接受答案,但不知道如何在activity的onSaveInstanceState中获取片段引用。 我也不特别想保存这个片段,当用户离开这个片段时,它的状态不需要保存。

我也尝试将if (getView() != null) {...}到片段中的onSaveInstanceState,但这没有什么区别。

问题

  • 为什么onSaveInstanceState被调用,即使片段还没有被添加到后端堆栈?
  • 当用户完成它时,以某种方式杀死碎片是否正确?
  • 有不同的解决方案吗?
  • 预先感谢您的帮助。

    安德鲁

    编辑

    如果我从添加片段的事务中删除addtobackstack(null) ,并删除它,那么问题就会消失,但是一个重要的功能也是如此......我可以将这种情况添加到我的onBackPressed覆盖函数中,但它似乎有点破解,而且不是一个好方法。


    在堆栈中添加片段的isVisible()检查onSaveInstanceState应该可以工作。

    不可见时不需要保留实例状态。

    链接地址: http://www.djcxy.com/p/58703.html

    上一篇: onSaveInstanceState called after fragment replaced

    下一篇: Save state of fragments in backstack