对于View
有ID的s,调用时会自动保存super.onSaveInstanceState(outState);
。
对于Fragment
s 添加到 an Activity
,在什么情况下会在重新创建时Activity
重新创建(例如屏幕旋转),在哪些情况下不会?要确定什么?规则是什么?
到目前为止,我已经尝试了以下案例。但是反复试验并不意味着任何规则或解决方案。
Fragment
重新存储s的情况:
- 正常情况:
FragmentTransaction.add()
带有 ID 的布局。 - 没有 UI 的片段:
FragmentTransaction.add()
仅到标签
不重新存储Fragment
s 的情况:
- 何时
super.onSaveInstanceState(outState);
跳过。 - 在没有匹配 ID 的 UI 中恢复
Fragment
s。
一般规则是什么?我在文档中遗漏了什么?
提前致谢。
编辑:
根据我的理解和实验,所有动态(以编程方式)添加Fragment
的 s 都在Activity
调用时保存super.onSaveInstanceState(outState)
。
- 所有动态(以编程方式)添加
Fragment
的 s包括,Fragment
s 只有一个标签(没有 UI),Fragment
s 附加到一个View
(带有 UI),- 和
Fragment
s同时带有 UI 和标签。 - (还有其他类型吗?)
关于将Fragment
带有 UI 的 a 恢复到没有匹配 ID 的布局中,Fragment
确实是重新创建的。它只是无法在布局中直观地显示,并带有以下警告消息:
04-08 11:41:22.445: W/PhoneWindow(9853): Previously focused view reported id 2131165226 during save, but can't be found during restore.
一旦我们返回到具有匹配 ID 的 UI,它将正确恢复。