【发布时间】:2021-12-31 15:36:10
【问题描述】:
我的导航如下:
FragmentList -> FragmentDetailA -> FragmentDetailB -> FragmentDetailC
我使用 viewModel 作为细节 FragmentDetailViewModel
private val detailViewModel: DetailViewModel by activityViewModels()
但是如果我向前走,然后向后走,上面的 fragmentDetails 就会改变。如何在不改变其他的情况下将视图模型分配给片段?
解决方案:
首先,将activityViewModels()改为viewModels()
然后,问题出在 setFragmentResultListener 上。在实例化新片段之前调用它,然后在片段 A 上而不是在片段 B 上进行调用。我决定使用 Bundle 对象在目的地之间传递数据。
非常感谢
【问题讨论】:
-
仅供参考
by viewModels()的要点是同一个类 的每个实例都获得相同的ViewModel对象,因此不同实例之间共享相同的数据。by activityViewModels()允许片段向当前活动询问特定 VM 的其副本 - 它允许同一活动中的单独片段访问同一 VM 并共享数据/状态。 (导航库中有一个类似的库,by navGraphViewModels(),它在整个导航图中的所有内容之间共享 VM 实例)。如果您希望 Fragment 拥有自己的唯一数据,请使用by viewModels()
标签: android kotlin fragment viewmodel