替换片段后调用onSaveInstanceState

时间:2014-11-30 14:11:47

标签: android android-fragments

问题

onSaveInstanceState在设备轮换时被调用,该片段已在片段事务中被替换。这导致IllegalStateException,并且尚未创建消息" Content视图。

研究

我找到了以下两个似乎最相关的答案

Using onSaveInstanceState with fragments in backstack?

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

我已尝试过的内容

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

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

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

问题

  1. 为什么要调用onSaveInstanceState,即使片段没有被添加到后栈?
  2. 当用户完成片段时,是否以某种方式杀死片段?
  3. 有不同的解决方案吗?
  4. 提前感谢您的帮助。

    安德鲁

    修改

    如果我从添加片段的事务中移除addtobackstack(null)以及删除它的那个,问题就会消失,但是一个重要的功能也是如此...我可以将这个案例添加到我的onBackPressed覆盖功能,但它看起来有点像黑客,并没有很好的方式。

1 个答案:

答案 0 :(得分:1)

添加isVisible()检查backstack中片段的onSaveInstanceState应该有效。

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