一个自定义视图的Android ViewModel

12

我想重构我的自定义视图以使用Android架构组件。但是,我发现

ViewModelProviders.of(...)

只接受 Activity 或 Fragment。有什么办法可以让其工作?我应该使用 Fragment 替代自定义视图吗?


@pskink,你的回答与我的问题无关。 - jakub
1
我已经有自定义视图,并希望使用Android架构组件将其重构为MVVM。 - jakub
我的自定义视图非常复杂,有很多代码,它不是一个简单的TextView。 - jakub
3
@pskink提出了问题,一切都在问题中。Android ViewModel不能与View一起使用,但没关系,我将我的View重构为一个片段(fragment)。 - jakub
1个回答

0

在View中获取ViewModel实例是可能的,但不建议这样做。根据this post

虽然在Activity或Fragment中获取ViewModel很容易,但在View中获取ViewModel并不直接。主要原因是View应该独立于所有处理过程,即使您的所有逻辑都在ViewModel中,访问View中的ViewModel也会使其依赖于不应该依赖的东西。控制View的推荐方法是根据来自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)

如上所述,如果可能的话,我尽量避免使用此方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接