【问题标题】:SharedViewModel between the scope of a fragmentSharedViewModel 之间的一个片段范围
【发布时间】:2020-03-31 16:56:04
【问题描述】:

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

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
}

现在,在每个片段中,我需要访问共享视图模型,而不是包含这些片段的活动托管的共享视图模型,因为我正在使用 Firebase,并且我有一个侦听器将数据发送到我的应用程序。

所以,如果我将视图模型附加到活动生命周期,我可以在这两者之间共享数据,但是,当我不在 FragmentA()FragmentB() 时,它也会监听数据

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

编辑

由于我使用的是 NavigationComponents,当我从 FragmentA() 导航到 FragmentB() 时,片段 A 会死掉,所以,如果我在那里创建我的 sharedviewmodel,它会在我访问 FragmentB()FragmentB() 时死掉视图模型的新实例。

【问题讨论】:

    标签: android firebase android-fragments android-navigation android-architecture-navigation


    【解决方案1】:

    这个问题有点太宽泛了。

    为什么不希望活动托管视图模型?如果您不希望在不实际显示 UI 时通知您的侦听器,您可以将其移除 [listeners]。我不太了解实时数据库(确保它具有相同的功能),但 Firestore 的 addSnapshotListener 方法返回 ListenerRegistration 对象,该对象有一个 remove() 方法来删​​除侦听器,因此您不会收到有关文档更新的通知,并且因此不收取任何费用。

    您可以通过您想要的任何组件托管ViewModel,但我什至会考虑使用 Object,因此您的ViewModel 的每个实例都会获得相同的单例,它存储缓存的值并以表格形式公开它LiveData 到您的观察者,但实际上仅在调用特定方法后才开始和停止观察 Firebase 节点(并更新您的片段观察的LiveData) - onStartObserving()/onStopObserving,可以从您的片段中调用' onStart() & onStop()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      相关资源
      最近更新 更多