对于View有ID的s,调用时会自动保存super.onSaveInstanceState(outState);。
对于Fragments 添加到 an Activity,在什么情况下会在重新创建时Activity重新创建(例如屏幕旋转),在哪些情况下不会?要确定什么?规则是什么?
到目前为止,我已经尝试了以下案例。但是反复试验并不意味着任何规则或解决方案。
Fragment重新存储s的情况:
- 正常情况:
FragmentTransaction.add()带有 ID 的布局。 - 没有 UI 的片段:
FragmentTransaction.add()仅到标签
不重新存储Fragments 的情况:
- 何时
super.onSaveInstanceState(outState);跳过。 - 在没有匹配 ID 的 UI 中恢复
Fragments。
一般规则是什么?我在文档中遗漏了什么?
提前致谢。
编辑:
根据我的理解和实验,所有动态(以编程方式)添加Fragment的 s 都在Activity调用时保存super.onSaveInstanceState(outState)。
- 所有动态(以编程方式)添加
Fragment的 s包括,Fragments 只有一个标签(没有 UI),Fragments 附加到一个View(带有 UI),- 和
Fragments同时带有 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,它将正确恢复。