【问题标题】:Is it a good practice to user Fragment.setRetainInstance to not handle recreation?用户 Fragment.setRetainInstance 不处理娱乐是一个好习惯吗?
【发布时间】:2012-07-21 18:58:19
【问题描述】:

为您的所有Fragments 使用Fragment.setRetainInstance() 以摆脱处理Fragments 娱乐、保存实例状态等的好习惯吗?为什么不呢?

【问题讨论】:

    标签: android


    【解决方案1】:

    是的,如果必须保留配置更改,您可以将它与不在后台堆栈中的片段一起使用。它只是让事情变得更简单。

    另见https://stackoverflow.com/a/8550351/1300995

    【讨论】:

    • 我们如何才能保留在后台堆栈中维护的片段中的配置更改。因为我们不能使用setRetainInstance(true)
    【解决方案2】:

    这并不总是好的,不。通过保留该实例,您是在告诉'ye old Android 为您提供与 Fragment 完全相同的实例,即片段的 onDestroy 永远不会被调用,而是 onAttach(ed) 和 onDetach(ed)。

    通常,由于方向更改(例如),您需要重新排列视图以利用不同的屏幕比例,并且让您的片段保持其状态将意味着框架不会尝试使用您的例如,如果以纵向模式启动,则“风景友好”的视图。

    onRetainInstance 的影响是微妙的,它不是灵丹妙药。小心使用。

    【讨论】:

    • 我们如何才能保留在后台堆栈中维护的片段中的配置更改。因为我们不能使用setRetainInstance(true)
    • 这不是真的,即使你在你的片段上调用setRetainInstance(true),它的onCreateView()方法也会被再次调用,(因此它将使用新的配置再次布局。
    • 刚刚重新确认了行为,我可以看到@nbarraille 指的是什么。以前,当我在 2012 年编写此答案时,如果您在不同的资源限定符 -port 或 -land 下为 onCreateView 中设置的片段设置了两个布局,那么使用 setRetainInstance(true) 将意味着起始布局将在屏幕旋转中重复使用。这似乎不再是这种情况了。请放心,以前这个电话主要有一些微妙的问题; stackoverflow.com/questions/10456077/…
    猜你喜欢
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2020-08-25
    • 2015-05-08
    • 2010-09-11
    相关资源
    最近更新 更多