Android 在fragment onCreateView或onCreate方法中初始化ViewModel的最佳位置是哪里?
我正在使用ViewModel的实时数据 我有一个场景,其中我有两个片段和一个活动。 片段A和片段B 从活动中,我启动了片段A(它显示名称列表,即从后端获取),当我点击名称时,它显示片段B(即返回堆栈) 现在从片段B开始,如果我按下后退按钮,它将返回到片段A,它显示一个空白屏幕,因为我已经在片段A的onCreate方法中实现了ViewModelAndroid 在fragment onCreateView或onCreate方法中初始化ViewModel的最佳位置是哪里?,android,android-fragments,Android,Android Fragments,我正在使用ViewModel的实时数据 我有一个场景,其中我有两个片段和一个活动。 片段A和片段B 从活动中,我启动了片段A(它显示名称列表,即从后端获取),当我点击名称时,它显示片段B(即返回堆栈) 现在从片段B开始,如果我按下后退按钮,它将返回到片段A,它显示一个空白屏幕,因为我已经在片段A的onCreate方法中实现了ViewModel 但是如果我在片段A的oncreateView方法中实现了ViewModel,它将继续添加观察者,因为片段没有被破坏 为了避免在onCreateView中保
但是如果我在片段A的oncreateView方法中实现了ViewModel,它将继续添加观察者,因为片段没有被破坏 为了避免在
onCreateView
中保留额外的观察者,将getViewLifecycleOwner()
作为LifecycleOwner
传递给LiveData
的观察方法。这将在片段的视图
被销毁后立即删除先前的观察者
。您可以在片段A的顶部添加片段B,而不是替换——这样片段A仍然有效,并且其所有数据都不会丢失,您不必调用onCreate或onCreateView onActivityCreated
为什么onActivityCreated您可以保证片段已附加到活动中。但它将通过使用onActivityCreated
继续添加observer。我假设ViewModel是跨片段共享的。