在获取ViewModel的片段时,应将“ viewModelStore”或“ this”作为ViewModelStore提供给ViewModelProvider()方法

问题描述 投票:0回答:1

在我的片段类中,当我获取viewModel时,可以用两种不同的方式编写代码。

  • 使用“ viewModelStore”

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

  • 使用“ this”

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

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

android android-fragments mvvm viewmodel android-viewmodel
1个回答
0
投票

如果您提供自己的ViewModelProvider.Factory,则没有区别,所以只使用更简单的this

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

val viewModel: FragmentViewModel by viewModels { viewModelFactory }

注意,如果您不是使用自己的工厂,则应始终传递ViewModelStoreOwner(即this),而不是仅传递ViewModelStore,因为the Javadoc明确提及:] >

如果所有者实现了default factory,则此方法将使用HasDefaultViewModelProviderFactory。否则,将使用HasDefaultViewModelProviderFactory

ViewModelProvider.NewInstanceFactory构造函数无法获取正确的默认工厂。

© www.soinside.com 2019 - 2024. All rights reserved.