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 - 保留片段?的主要内容,如果未能解决你的问题,请参考以下文章
PopBackStack 但将第一个片段保留在 android