什么确定的片段在活动恢复重新创建?(What to determine a Fragment res

2019-07-22 10:57发布

对于View小号有身份证,他们会自动保存在调用时super.onSaveInstanceState(outState);

对于Fragment增补一个Activity ,有什么,这将是其在重新创建的情况下, Activity是重新创建(如屏幕旋转),以及案件是什么也不会? 什么决定? 什么是规则?

到目前为止,我已经尝试以下几种情况: 但审判正误差并不意味着任何规则或解决方案。

情况下,当Fragment s的重新存储:

  1. 正常情况下: FragmentTransaction.add()到带有ID的布局。
  2. 片段没有UI: FragmentTransaction.add()标签只有

当案件Fragment s的不会重新存储:

  1. super.onSaveInstanceState(outState); 被跳过。
  2. 恢复Fragment S IN的UI没有匹配ID。

什么是一般规则? 什么我错过了文档中?

提前致谢。


编辑:

据我了解,和实验,所有动态(编程)添加Fragment s的在他们的保存Activity调用super.onSaveInstanceState(outState)

  • 所有动态(编程)加入Fragment s可包括,
    • Fragment s的唯一标签(无UI),
    • Fragment小号连接到View (与UI),
    • Fragment s的两者的用户界面和一个标签。
    • (有没有任何其他类型?)

关于恢复Fragment与UI到与没有匹配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的用户界面,它会被正确地恢复。


仍然期待着一些可靠的参考和你的意见!

Answer 1:

我有同样的问题,你可以在这里看到: 后屏幕旋转,findFragmentById()返回一个片段,即使有里面的布置没有这样的ID

在Android开发者文档http://developer.android.com/training/basics/fragments/communicating.html引用这句:

当配置变化导致托管这些碎片重新启动活动,它的新实例可以使用不同的布局不包括在同一片段作为以前的布局。 在这种情况下,所有以前的片段仍会被实例化,并在新的实例中运行。 然而,任何不再与视图层次结构标签相连不会有他们的内容视图中创建并返回false从isInLayout()。 (这里的代码也显示了如何确定是否放置在容器中的片段与容器的布局不再运行,并避免在这种情况下创建其视图层次)。

这意味着,我们必须检查屏幕方向比空指针检查相信。



文章来源: What to determine a Fragment restore upon Activity re-create?