ViewModelProviders 和 ViewModelProvider class 有什么区别?
What is the difference between ViewModelProviders and ViewModelProvider class?
我看到两个 class 具有相似名称的 ViewModelProviders 和 ViewModelProvider。谁能解释一下这些 class 之间的区别是什么?哪个 class 实际上提供了 ViewModel?
ViewModelProviders (belongs to Maven artifact android.arch.lifecycle:extensions) is a class from android.arch.lifecycle
package which contains utilities methods for ViewModelStore class & returns 你对象是 ViewModelProvider
class 当你使用它的 of()
方法时。
因此,您可以将 class 库视为 ViewModelProvider
的包装器。
另一方面,ViewModelProvider (属于Maven神器android.arch.lifecycle:viewmodel)是class提供ViewModels
范围。因此,Activity
的默认 ViewModelProvider
或 Fragment
可以从 ViewModelProviders
class.
获得
所以,是的!这是为您的 ViewModel
提供核心逻辑的主要 class,但您需要从 ViewModelProviders
获得它,您 returns 这个 class 从.
获得ViewModel
编辑:
Class ViewModelProviders
已被弃用,我们现在可以通过创建新实例直接使用 ViewModelProvider
来获取 ViewModel
.
像这样:ViewModelProvider(this).get(SomeViewModel::class.java)
ViewModelProviderS class 提供 ViewModelProvider 的实例 class.Your 调用 ViewModelProviders.of("this") 创建并 returns 与 [=22] 关联的 ViewModelProvider =].
ViewModelProvider 另一方面提供 Activity 的 ViewModel 实例。调用 ViewModelProviders.get(ExampleViewModel::class.java) returns ExampleViewModel class
的实例
这些函数通常像这样组合在一起:
ViewModelProviders.of("this").get(ExampleViewModel::class.java)
@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
}
Does this work?
我看到两个 class 具有相似名称的 ViewModelProviders 和 ViewModelProvider。谁能解释一下这些 class 之间的区别是什么?哪个 class 实际上提供了 ViewModel?
ViewModelProviders (belongs to Maven artifact android.arch.lifecycle:extensions) is a class from android.arch.lifecycle
package which contains utilities methods for ViewModelStore class & returns 你对象是 ViewModelProvider
class 当你使用它的 of()
方法时。
因此,您可以将 class 库视为 ViewModelProvider
的包装器。
另一方面,ViewModelProvider (属于Maven神器android.arch.lifecycle:viewmodel)是class提供ViewModels
范围。因此,Activity
的默认 ViewModelProvider
或 Fragment
可以从 ViewModelProviders
class.
所以,是的!这是为您的 ViewModel
提供核心逻辑的主要 class,但您需要从 ViewModelProviders
获得它,您 returns 这个 class 从.
ViewModel
编辑:
Class ViewModelProviders
已被弃用,我们现在可以通过创建新实例直接使用 ViewModelProvider
来获取 ViewModel
.
像这样:ViewModelProvider(this).get(SomeViewModel::class.java)
ViewModelProviderS class 提供 ViewModelProvider 的实例 class.Your 调用 ViewModelProviders.of("this") 创建并 returns 与 [=22] 关联的 ViewModelProvider =].
ViewModelProvider 另一方面提供 Activity 的 ViewModel 实例。调用 ViewModelProviders.get(ExampleViewModel::class.java) returns ExampleViewModel class
的实例这些函数通常像这样组合在一起:
ViewModelProviders.of("this").get(ExampleViewModel::class.java)
@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
}
Does this work?