簡體   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