问题

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

研究

我发现以下两个答案似乎最相关

Using onSaveInstanceState with fragments in backstack?

onSaveInstanceState of previous fragment is called on-orientation of current fragment

我已经尝试过的

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

我阅读了第一个问题的公认答案,但是不确定如何在活动的onSaveInstanceState中获取片段引用。我也特别不想保存该片段,当用户离开该片段时,不需要保存其状态。

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

问题


即使未将片段添加到后台堆栈,为什么也要调用onSaveInstanceState?
在用户使用完片段后,以某种方式杀死该片段的正确方法是否正确?
有其他解决方案吗?


预先感谢您的帮助。

安德鲁

编辑

如果我从添加片段的事务中删除addtobackstack(null)并删除了该片段,那么问题就消失了,但是重要的功能也消失了……我可以将这种情况添加到我的onBackPressed覆盖函数中,但看起来有点骇人听闻,而且不是很好。

最佳答案

在后台添加片段的isVisible()检查onSaveInstanceState应该可以工作。

当实例状态不可见时,无需保留它。

10-08 02:50