【发布时间】: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