【问题标题】:Android - retaining fragment?Android - 保留片段?
【发布时间】:2018-01-21 17:03:24
【问题描述】:

您好,我有一个关于在重新创建 Activity 时保留片段的问题。 我听说一种方法是在 onCreate 方法中使用 setRetainFragment(true)。 问题是 - 这与跟踪 Activity 中的私有 Fragment 属性有什么不同,以便我在整个 Activity 的生命周期中始终拥有相同的 Fragment 对象?谢谢!

【问题讨论】:

    标签: android android-activity fragment lifecycle


    【解决方案1】:

    setRetainInstance(true):片段的状态将在配置更改(例如屏幕旋转)时保留(而不是销毁!)。国家将 即使配置更改导致“父”活动被破坏,也会保留。但是,Fragment 的视图被破坏了!

    生命周期调用:

    • onPause() -> onStop() -> onDestroyView() -> onDetach()
    • onAttach() -> onCreateView() -> onStart() -> onResume()

    setRetainInstance(false): Fragment 的状态不会在配置更改时保留(默认)。

    生命周期调用:

    • onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
    • onAttach() -> onCreate() -> onCreateView() -> onStart() -> onResume()

    重要提示:setRetainInstance(true) 不适用于后堆栈上的片段。 setRetainInstance(true) 对于长时间运行的操作特别有用 在不关心配置更改的 Fragments 内部。

    【讨论】:

    • 有没有办法在将 setRetainInstance 设置为 true 时拥有一个带有 Web 视图的片段并使其不重新加载页面?
    【解决方案2】:

    如果您的意思是私有属性,则表示类中的属性,因此每次重新创建活动时,都会在 t=t1 为示例创建一个带有新私有片段的新实例,创建活动 A 的实例,因此它包含所有它的私有变量,并且在 t=t2 中创建了一个新的 Activity A 实例,因此当您设置 setRetainFragment(true)the Android 框架在后台保留您的片段而不重新创建它们并保留它的状态。 您可以参考此链接了解更多信息Understanding Fragment's setRetainInstance(boolean)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多