簡體   English   中英

用於自定義視圖的 Android ViewModel

[英]Android ViewModel for a custom view

我想重構我的自定義視圖以使用 android 架構組件。 然而,我看到

ViewModelProviders.of(...)

只需要活動或片段。 知道如何使它工作嗎? 我應該使用片段而不是自定義視圖嗎?

可以在 View 中獲取 ViewModel 實例,但不推薦這樣做。 根據這篇文章

雖然在 Activity 或 Fragment 中獲取 ViewModel 很容易,但在 View 中獲取此實例並不簡單。 這背后的主要原因是因為 Views 應該獨立於所有處理,即使您的所有邏輯都在 ViewModel 內,您在 View 內訪問該 ViewModel 的事實使它依賴於它不應該依賴的東西。 控制視圖的推薦方法是根據來自 Fragment 或 Activity 的 ViewModel 的狀態將參數傳遞給它。

重點是嘗試從上下文中獲取 Activity:

override val activity: FragmentActivity by lazy {  
    try {
        context as FragmentActivity
    } catch (exception: ClassCastException) {
        throw ClassCastException("Please ensure that the provided Context is a valid FragmentActivity")
    }
}
override var viewModel = ViewModelProvider(activity).get(SharedViewModel::class.java)

如前所述,如果可能的話,我會盡量避免這種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM