[英]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.