从 ViewModel 观察 LiveData

新手上路,请多包涵

我有一个单独的类,我在其中处理数据获取(特别是 Firebase),我通常从中返回 LiveData 对象并异步更新它们。现在我想将返回的数据存储在 ViewModel 中,但问题是为了获得所述值,我需要观察从我的数据获取类返回的 LiveData 对象。观察方法需要一个 LifecycleOwner 对象作为第一个参数,但我的 ViewModel 中显然没有该对象,而且我知道我不应该在 ViewModel 中保留对 Activity/Fragment 的引用。我应该怎么办?

原文由 Vuk Bibic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

在 Google 开发人员 Jose Alcérreca 的 这篇博客文章 中,建议在这种情况下使用转换(请参阅“存储库中的 LiveData”段落),因为 ViewModel 不应包含与 View 相关的任何引用(活动,上下文等),因为它很难测试。

原文由 guglhupf 发布,翻译遵循 CC BY-SA 4.0 许可协议

例如,如果您需要获取一个 ID(作为 LiveData)并使用它再次调用 LiveData。将 ID 存储在 selectedID 中,Transformations 将观察该字段并在其更改时调用 getAllByID(selectedID) (也是 LiveData)。

 var selectedID = MutableLiveData<Int>()

val objects = Transformations.switchMap(selectedID) { getAllByID(it) }

原文由 Jeffrey 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题