【问题标题】:Kotlin - share viewmodel between data based on selectionKotlin - 基于选择在数据之间共享视图模型
【发布时间】:2020-12-11 21:14:20
【问题描述】:

我想在片段之间共享视图模型,假设我有一个片段A,它显示一个带有元素(视图持有者)的回收器视图,当我点击其中一个时,我希望元素显示在片段B中以获得详细视图. 到目前为止,我已经确定了两种方法来做到这一点。 1)拥有一个在片段之间共享的超级视图模型,并像这样保存所选视图模型的引用:

class ShareHappyPlaceModel : ViewModel() {
    val happyPlace: MutableLiveData<HappyPlaceModel> = MutableLiveData()
}

2) 将视图模型转化为实现parcable的数据类,并通过fragment之间的导航进行共享。然后在 fragmentB 中从数据类对象重新创建一个视图模型。

第一个似乎并不优雅,因为我宁愿仅对 fagementB 进行引用共享,而不是对所有片段进行共享。 第二个问题是我需要将视图模型转换为中间类。

你有什么意见?

【问题讨论】:

  • 您确定需要共享视图模型吗?您不能将所选项目作为新片段的参数传递吗?如果确实需要在多个 Fragment 之间共享一个 viewModel 并且使用导航组件,可以使用by navGraphViewModels
  • 因为我想在第二个片段上显示详细信息,所以对我来说信息应该存储在视图模型中,但也许我错了。

标签: android kotlin navigation


【解决方案1】:

如果你想对两个片段使用相同的视图模型here is 一篇关于它的好文章。但我认为它不适合你。您的案例的问题是您在第一个片段中有 recyclerView 。因此,据我了解,recyclerView 中的每个项目都有自己的视图模型。 FragmentB 和回收站项目的视图模型不能共享同一个父级。因此,在您的情况下,项目传递看起来更健康。

【讨论】:

  • 我认为他们正在使用共享视图模型方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多