Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在fragment onCreateView或onCreate方法中初始化ViewModel的最佳位置是哪里?_Android_Android Fragments - Fatal编程技术网

Android 在fragment onCreateView或onCreate方法中初始化ViewModel的最佳位置是哪里?

Android 在fragment onCreateView或onCreate方法中初始化ViewModel的最佳位置是哪里?,android,android-fragments,Android,Android Fragments,我正在使用ViewModel的实时数据 我有一个场景,其中我有两个片段和一个活动。 片段A和片段B 从活动中,我启动了片段A(它显示名称列表,即从后端获取),当我点击名称时,它显示片段B(即返回堆栈) 现在从片段B开始,如果我按下后退按钮,它将返回到片段A,它显示一个空白屏幕,因为我已经在片段A的onCreate方法中实现了ViewModel 但是如果我在片段A的oncreateView方法中实现了ViewModel,它将继续添加观察者,因为片段没有被破坏 为了避免在onCreateView中保

我正在使用ViewModel的实时数据

我有一个场景,其中我有两个片段和一个活动。 片段A和片段B

从活动中,我启动了片段A(它显示名称列表,即从后端获取),当我点击名称时,它显示片段B(即返回堆栈)

现在从片段B开始,如果我按下后退按钮,它将返回到片段A,它显示一个空白屏幕,因为我已经在片段A的onCreate方法中实现了ViewModel


但是如果我在片段A的oncreateView方法中实现了ViewModel,它将继续添加观察者,因为片段没有被破坏

为了避免在
onCreateView
中保留额外的
观察者,将
getViewLifecycleOwner()
作为
LifecycleOwner
传递给
LiveData
观察方法。这将在
片段的
视图
被销毁后立即删除先前的
观察者

您可以在片段A的顶部添加片段B,而不是替换——这样片段A仍然有效,并且其所有数据都不会丢失,您不必调用onCreate或onCreateView

onActivityCreated
为什么onActivityCreated您可以保证片段已附加到活动中。但它将通过使用
onActivityCreated
继续添加observer。我假设ViewModel是跨片段共享的。