首页 > 解决方案 > 在片段中获取 ViewModel 时,我应该将“viewModelStore”还是“this”作为 ViewModelStore 提供给 ViewModelProvider() 方法

问题描述

在我的片段类中,当我得到我的视图模型时,我可以用两种不同的方式编写我的代码。

ViewModelProvider(viewModelStore, viewModelFactory).get(FragmentViewModel::class.java)
ViewModelProvider(this, viewModelFactory).get(FragmentViewModel::class.java)

我的问题是,这两种选择之间是否存在任何区别,如果是,哪一种是更可取的方法?

标签: androidandroid-fragmentsmvvmviewmodelandroid-viewmodel

解决方案


如果您提供自己ViewModelProvider.Factorythis.

当然,如果你在 Kotlin 中,根本不需要ViewModelProvider直接使用,而是想使用Fragment KTX并使用

val viewModel: FragmentViewModel by viewModels { viewModelFactory }

请注意,如果您没有使用自己的工厂,则应始终传入 a ViewModelStoreOwner(ie, )而this不是仅传入the Javadoc明确提到:ViewModelStore

如果所有者实现,此方法将使用默认工厂HasDefaultViewModelProviderFactory。否则,ViewModelProvider.NewInstanceFactory将使用 a。

构造ViewModelStore函数无法获得正确的默认工厂。


推荐阅读