繁体   English   中英

ViewModelProviders 和 ViewModelProvider 类有什么区别?

[英]What is the difference between ViewModelProviders and ViewModelProvider class?

我看到了两个名称相似的类,ViewModelProviders 和 ViewModelProvider。 任何人都可以解释这些课程之间的区别是什么? 哪个类实际上提供了 ViewModel?

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

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

另一方面, ViewModelProvider (属于 Maven 工件 android.arch.lifecycle:viewmodel)是为范围提供ViewModels类。 因此,它是Activity的默认ViewModelProvider ,或者可以从ViewModelProviders类中获取Fragment

所以,是的! 这是为您的ViewModel提供核心逻辑的主类,但您需要从ViewModelProviders获取它,它返回此类以从中获取ViewModel

编辑:

ViewModel 2.2.0 版之后:

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

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

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

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

这些功能通常一起使用,例如:

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

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

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
}

这行得通吗?

暂无
暂无

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

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