地狱! 我正在努力提高自己的Android体系结构技能。我发现这个article表示在视图中调用viewModels函数是一种不好的做法。
例如,以这种方式调用函数是不好的做法。
override fun onClick(v: View?) {
if (v == vk_login) {
loginViewModel.onVKLoginClick()
}
}
我了解如何使用LiveData从ViewModel到View传输数据和动作。为此,我们在视图中初始化LiveData。但是我找不到任何信息,该如何从视图中使用LiveData(或类似方式)发送用户操作信息。
我应该在视图中初始化LiveData并为其订阅视图模型(听起来很奇怪)。
或者像这样使用smth更好:
loginViewModel.nameFromUser.value = "some name from text view"
或者我发现的文章是错误的并且可以从视图中调用viewModels函数吗?
答案 0 :(得分:2)
ViewModel
绝不能包含对Android框架的引用,更不要说视图了,否则将导致内存泄漏。最好像这样使用loginViewModel.nameFromUser.value = "some name from text view"
。
Source - ViewModel Patterns/Anti Patterns
视图可以观察实时数据,但是ViewModel
无法观察视图,因为视图不会发出LiveData
对象。
从文档中引用:
警告:ViewModel绝不能引用视图,生命周期或任何可能包含对活动上下文的引用的类。 ViewModel对象旨在使视图或LifecycleOwners的特定实例寿命更长