Android 如何在 MVVM 架构中将动作从 View 发送到 ViewModel

How to send actions from View to ViewModel in MVVM architecture in Android

您好! 我正在努力提高我的 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 函数吗?

A ViewModel 永远不应包含对 Android 框架的引用,更不用说视图了,否则会导致内存泄漏。最好这样使用loginViewModel.nameFromUser.value = "some name from text view"

Source - ViewModel Patterns/Anti Patterns

视图可以观察实时数据,但 ViewModel 无法观察视图,因为视图不发出 LiveData 对象。

引用自文档:

Caution: A ViewModel must never reference a view, Lifecycle, or any class that may hold a reference to the activity context. ViewModel objects are designed to outlive specific instantiations of views or LifecycleOwners