Android 片段范围之间的SharedViewModel

Android 片段范围之间的SharedViewModel,android,firebase,android-fragments,android-navigation,android-architecture-navigation,Android,Firebase,Android Fragments,Android Navigation,Android Architecture Navigation,我有两个片段应该共享一个模型 class FragmentA(): Fragment() { val sharedViewModel = ViewModelProvider.(need_a_shared_context)....//not the activity context } class FragmentB(): Fragment() { val sharedViewModel = ViewModelProvider.(need_a_shared_context).... //no

我有两个片段应该共享一个模型

class FragmentA(): Fragment() {
  val sharedViewModel = ViewModelProvider.(need_a_shared_context)....//not the activity context
}

class FragmentB(): Fragment() {
val sharedViewModel = ViewModelProvider.(need_a_shared_context).... //not the activity context
}
现在,在每个片段中,我需要访问一个共享的viewmodel,而不是由包含这些片段的活动托管的sharedviewmodel,因为我正在使用Firebase,我有一个侦听器向我的应用程序发送数据

因此,如果我将viewmodel附加到活动生命周期,我可以在这两者之间共享数据,但是,当我不在
FragmentA()
FragmentB()

当我只在FragmentA()或FragmentB()时,有没有办法确定这个sharedviewmodel的创建范围

编辑
由于我使用的是NavigationComponents,当我从
FragmentA()
导航到
FragmentB()
时,片段A将消失,因此,如果我在那里创建我的sharedviewmodel,当我访问
FragmentB()
时,它将消失,
FragmentB()
将生成viewmodel的新实例。

问题有点太广泛了

为什么不希望活动承载viewmodel?如果您不希望在不实际显示UI时通知您的侦听器,您可以删除它[侦听器]。我不知道实时数据库的确切情况(当然它有相同的功能),但是Firestore的
addSnapshotListener
方法返回
ListenerRegistration
对象,该对象有一个
remove()
方法来删除侦听器,因此您不会收到文档更新的通知,因此不会为此收取费用

你可以用你想要的任何组件来主持<代码> VIEWMID[/COD],但是我甚至会考虑使用对象来实现它,所以你的<代码> VIEWMDES> /CODE的每一个实例都得到相同的单体,它存储缓存的值并以“代码> LIFEDATA < /代码>的形式向你的观察者公开,但实际上,只有在调用特定的方法后才会启动和停止对Firebase节点的观察(并更新片段观察的

LiveData
),这些方法可以从片段的
onStart()
&
onStop()
调用