对调用两次的片段使用视图模型

Use viewmodel for a fragment called twice

我有一个导航如下:

FragmentList -> FragmentDetailA -> FragmentDetailB -> FragmentDetailC

我为细节使用 viewModel FragmentDetailViewModel

private val detailViewModel: DetailViewModel by activityViewModels()

但是如果我向前走,然后再向后走,上面的fragmentDetails就变了。如何在不更改其他片段的情况下将视图模型分配给片段?

解法:

首先,将 activityViewModels() 更改为 viewModels()

然后,问题出在setFragmentResultListener。它在实例化新片段之前被调用,然后调用是在片段 A 而不是片段 B 上进行的。我决定使用 Bundle 对象在目的地之间传递数据。

非常感谢

听起来您想 link 视图模型到片段。

ViewModelProvider(this,viewModelFactory).get(MyViewModel.class)

通过这种方式初始化视图模型,视图模型依赖于父视图模型activity你必须使用这种方式

private val detailViewModel: DetailViewModel by viewModels()

您的视图模型实例取决于您的片段实例。