ViewModelProvider 和 ViewModelProvider 类有什么区别?



我看到两个名称相似的类,ViewModelProviders和ViewModelProvider。谁能解释一下这些类之间有什么区别?哪个类实际提供视图模型?

ViewModelProviders (属于Maven artifact android.arch.lifecycle:extensions)android.arch.lifecycle包中的一个类,其中包含ViewModelStore类的实用程序方法,并在使用of()方法时返回ViewModelProvider类的对象。

因此,您可以将其视为ViewModelProvider库类的包装器。

另一方面,ViewModelProvider(属于Maven artifact android.arch.lifecycle:viewmodel)是为范围提供ViewModels的类。因此,这是可以从类中获得ActivityFragment的默认ViewModelProviderViewModelProviders

所以,是的!这是为你ViewModel提供核心逻辑的主类,但你需要从ViewModelProviders获取它,这返回了这个类来获取ViewModel

编辑:

在视图模型版本 2.2.0 之后:

ViewModelProviders已被弃用,我们现在可以通过创建它的新实例来直接使用ViewModelProvider获取ViewModel

像这样的东西:ViewModelProvider(this).get(SomeViewModel::class.java)

ViewModelProviderS 类提供 ViewModelProvider 类的实例。对 ViewModelProviders.of("this") 的调用将创建并返回与活动关联的 ViewModelProvider。

另一方面,ViewModelProvider 提供了活动的 ViewModel 实例。调用 ViewModelProviders.get(ExampleViewModel::class.java) 将返回 ExampleViewModel 类的实例

这些函数通常组合在一起,如下所示:

ViewModelProviders.of("this").get(ExampleViewModel::class.java)

@andritK,现在似乎ViewModelProviders已被弃用。文档说,在这种情况下,我们可以直接使用ViewModelProvider。那么如何将以下代码更改为以下内容:

inline fun <reified T : ViewModel> Fragment.viewModel(factory: ViewModelProvider.Factory, body: T.() -> Unit): T {
val vm = ViewModelProviders.of(this, factory)[T::class.java]
vm.body()
return vm
}

inline fun <reified T : ViewModel> Fragment.viewModel(factory: ViewModelProvider.Factory, body: T.() -> Unit): T {
val vm = ViewModelProvider(this, factory).get(T::class.java)
vm.body()
return vm
}

这行得通吗?

相关内容

  • 没有找到相关文章

最新更新