Android - 保留片段?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于Android - 保留片段?的主要内容,如果未能解决你的问题,请参考以下文章

android如何跨片段分离/附加保留视图状态

PopBackStack 但将第一个片段保留在 android

包含viewpager的android活动缓慢打开

片段不能转换为 android.app.activity

viewpager 中的 3 个 android 片段,如何让它们全部存活?

Android 片段,在 TabHost 中找不到 id 的视图