qba*_*ait 8 android android-custom-view android-architecture-components
我想重构我的自定义视图以使用android体系结构组件。但是,我看到
ViewModelProviders.of(...)
Run Code Online (Sandbox Code Playgroud)
只接受活动或片段。任何想法如何使其工作?我应该使用片段而不是自定义视图吗?
可以在 View 中获取 ViewModel 实例,但不建议这样做。根据这篇文章:
虽然在 Activity 或 Fragment 中获取 ViewModel 很容易,但在 View 中获取此实例却并不简单。这背后的主要原因是视图应该独立于所有处理,即使您的所有逻辑都位于 ViewModel 内,但您在视图内访问该 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)
Run Code Online (Sandbox Code Playgroud)
正如所提到的想法,如果可能的话,我会尽量避免这种方法。
| 归档时间: |
|
| 查看次数: |
1036 次 |
| 最近记录: |