ViewModelProviders和ViewModelProvider类之间有什么区别?

时间:2019-01-21 12:01:29

标签: android mvvm viewmodel

我看到了两个名称相似的类,即ViewModelProviders和ViewModelProvider。谁能解释这些类之间的区别?哪个类实际提供了ViewModel?

3 个答案:

答案 0 :(得分:5)

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

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

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

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

希望,我说清楚了!

答案 1 :(得分:0)

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

另一方面,

ViewModelProvider提供Activity的ViewModel实例。调用ViewModelProviders.get(ExampleViewModel :: class.java)返回ExampleViewModel类的实例

这些功能通常一起使用:

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

答案 2 :(得分:0)

@andritK,看来ViewModelProviders现在已被弃用。文档说,在这种情况下,我们可以立即使用ViewModelProviders。然后将以下代码更改为以下代码:

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
}

这行吗?