问题
设备旋转时,将为片段事务中已替换的片段调用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应该可以工作。
当实例状态不可见时,无需保留它。