[英]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 发行说明(添加该构造函数时):
您可以将
Fragment
或FragmentActivity
传递给新的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.