在重新创建活动时确定片段还原的内容是什么?

时间:2013-03-21 19:01:14

标签: android android-layout android-fragments android-fragmentactivity fragmenttransaction

对于拥有ID的View个人,在致电super.onSaveInstanceState(outState);时会自动保存这些ID。

对于添加到Fragment的{​​{1}},在重新创建Activity(例如屏幕旋转)时将重新创建的情况是什么,以及什么是这个案子不会吗?怎么决定?规则是什么?

到目前为止,我已尝试过以下案例。但是试验错误并不意味着任何规则或解决方案。

重新存储Activity的情况:

  1. 正常情况:Fragment到带有ID的布局。
  2. 没有用户界面的片段:FragmentTransaction.add()仅限标记
  3. FragmentTransaction.add() s NOT 重新存储的情况:

    1. 跳过Fragment时。
    2. 在没有匹配ID的用户界面中恢复super.onSaveInstanceState(outState);
    3. 一般规则是什么?我在文档中遗漏了什么?

      提前致谢。


      编辑:

      根据我的理解和实验,所有动态(以编程方式)添加的Fragment都会保存在Fragment来电Activity上。

      • 所有动态(以编程方式)添加的super.onSaveInstanceState(outState) s 包含,
        • Fragment只有一个标签(没有用户界面),
        • Fragment附加到Fragment(带有用户界面),
        • View两者一个用户界面和一个标记。
        • (还有其他类型吗?)

      关于将具有UI的Fragment恢复为没有匹配ID的布局,确实重新创建了Fragment。它无法在布局中以可视方式显示,并显示以下警告消息:

      Fragment

      一旦我们回到具有匹配ID的UI,它将被正确恢复。


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

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,你可以在这里看到:After screen rotation, findFragmentById() returns a fragment, even if there's no such ID inside the layout

位于http://developer.android.com/training/basics/fragments/communicating.html的Android开发者文档引用了这个:

  

当配置更改导致托管这些活动时   要重新启动的片段,其新实例可能会使用不同的布局   不包含与先前布局相同的片段。在这   case仍然会实例化所有以前的片段   在新实例中运行。但是,任何不再是   与视图层次结构中的标记关联不会   他们创建了内容视图,并将从isInLayout()返回false。   (此处的代码还显示了如何确定是否放置了片段   在容器中不再在具有该容器的布局中运行   并避免在这种情况下创建其视图层次结构。)

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