我看到了两个名称相似的类,即ViewModelProviders和ViewModelProvider。谁能解释这些类之间的区别?哪个类实际提供了ViewModel?
答案 0 :(得分:5)
ViewModelProviders (属于Maven工件android.arch.lifecycle:extensions)是android.arch.lifecycle
包中的一个类,其中包含ViewModelStore类的实用程序方法,当您使用ViewModelProvider
类的方法时,将返回该对象。
因此,您可以将其视为of()
库类的包装器。
另一方面,ViewModelProvider (属于Maven工件android.arch.lifecycle:viewmodel)是为范围提供ViewModelProvider
的类。因此,ViewModels
的默认ViewModelProvider
或Activity
类的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
}
这行吗?