【发布时间】:2013-03-11 11:03:44
【问题描述】:
对于有ID的Views,调用super.onSaveInstanceState(outState);时会自动保存。
对于添加到Activity 的Fragments,在哪些情况下会在重新创建其Activity 时重新创建(例如屏幕旋转),在哪些情况下不会?要确定什么?规则是什么?
到目前为止,我已经尝试了以下案例。但反复试验并不意味着任何规则或解决方案。
Fragments 重新存储的情况:
- 正常情况:
FragmentTransaction.add()到带有 ID 的布局。 - 没有 UI 的片段:
FragmentTransaction.add()仅用于标记
Fragments 不重新存储的情况:
- 当
super.onSaveInstanceState(outState);被跳过时。 - 在没有匹配 ID 的 UI 中恢复
Fragments。
一般规则是什么?我在文档中遗漏了什么?
提前致谢。
编辑:
根据我的理解和实验,所有动态(以编程方式)添加的Fragments 都保存在他们的Activity 调用super.onSaveInstanceState(outState) 时。
-
所有动态(以编程方式)添加的
Fragments包括,-
Fragments 只有一个标签(没有 UI), -
Fragments 附加到View(带有 UI), - 和
Fragments 都一个用户界面和一个标签。 - (还有其他类型吗?)
-
关于将带有 UI 的 Fragment 恢复到没有匹配 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,它就会正确恢复。
我仍然期待一些可靠的参考和您的意见!
【问题讨论】:
-
有了source codes,所有的问题都可以解决:)
标签: android android-layout android-fragments android-fragmentactivity fragmenttransaction