繁体   English   中英

ViewModelProvider 构造函数有什么区别

[英]what is the difference between ViewModelProvider constructors

我正在学习 ViewModel,我想知道这些获取ViewModelProvider实例的方法之间有什么区别吗?

方法一:

ViewModelProvider viewModelProvider = new ViewModelProvider(getViewModelStore(),
                ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()));
mViewModel = viewModelProvider.get(NoteActivityViewModel.class);

方法B:

mViewModel = new ViewModelProvider(this).get(NoteActivityViewModel.class);

根据ViewModelProvider(ViewmodelStoreOwner)文档

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

根据Lifecycle 2.2.0 发行说明(添加该构造函数时):

您可以将FragmentFragmentActivity传递给新的ViewModelProvider(ViewModelStoreOwner)构造函数,以在使用Fragment 1.2.0时实现相同的功能。

Fragment 1.2.0 发行说明state 指出:

SavedStateViewModelFactory现在是by viewModels()by activityViewModels()ViewModelProvider构造函数或ViewModelProviders.of()与 Fragment 使用时使用的默认工厂。

所以new ViewModelProvider(this)使用SavedStateViewModelFactory ,它提供了AndroidViewModelFactory提供的一切,除了支持ViewModel 的 Saved State 模块

使用 Fragment 1.2.0 或更高版本时,没有理由将ViewModelProvider与标准工厂之一一起使用 - 只有当您拥有自己的自定义工厂时,该构造函数才有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM