繁体   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