在我的片段类中,当我获取viewModel时,可以用两种不同的方式编写代码。
ViewModelProvider(viewModelStore, viewModelFactory).get(FragmentViewModel::class.java)
ViewModelProvider(this, viewModelFactory).get(FragmentViewModel::class.java)
我的问题是,这两种选择之间是否存在任何区别,如果可以,哪种方法更可取?
如果您提供自己的ViewModelProvider.Factory
,则没有区别,所以只使用更简单的this
。
[当然,如果您在Kotlin,根本不需要直接使用ViewModelProvider
,而是想使用Fragment KTX并使用
val viewModel: FragmentViewModel by viewModels { viewModelFactory }
注意,如果您不是使用自己的工厂,则应始终传递ViewModelStoreOwner
(即this
),而不是仅传递ViewModelStore
,因为the Javadoc明确提及:] >
如果所有者实现了default factory,则此方法将使用
HasDefaultViewModelProviderFactory
。否则,将使用HasDefaultViewModelProviderFactory
。
ViewModelProvider.NewInstanceFactory
构造函数无法获取正确的默认工厂。