繁体   English   中英

重新确定Activity时如何确定片段还原?

[英]What to determine a Fragment restore upon Activity re-create?

对于具有ID的View ,在调用super.onSaveInstanceState(outState);时将自动保存它们super.onSaveInstanceState(outState);

对于添加到Activity Fragment ,在重新创建其Activity (例如屏幕旋转)时将重新创建它的情况是什么? 确定什么? 规则是什么?

到目前为止,我已经尝试了以下情况。 但是,试错法并不意味着任何规则或解决方案。

重新存储Fragment的情况:

  1. 正常情况:将FragmentTransaction.add()到具有ID的布局中。
  2. 没有UI的FragmentTransaction.add()FragmentTransaction.add()仅用于标签

重新存储Fragment的情况:

  1. super.onSaveInstanceState(outState); 被跳过。
  2. 没有匹配ID的UI中还原的Fragment

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

提前致谢。


编辑:

据我了解和实验,所有动态(以编程方式)添加的Fragment都保存在其Activity调用super.onSaveInstanceState(outState)

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

关于将具有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,它就会正确还原。


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

我遇到了同样的问题,您可以在这里看到它: 屏幕旋转后,即使布局内没有这样的ID,findFragmentById()也会返回一个片段

http://developer.android.com/training/basics/fragments/communicating.html上的Android开发者文档引用了以下内容:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM