[英]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
。
編輯:
類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.