1

根据我的小知识:

在 MVVM (Model-View-ViewModel) 架构模式中,视图应该通知视图模型进行用户交互,例如按钮单击。视图模型通过更新视图将要观察的可观察数据流 (LiveData) 来响应。因此视图会更新 UI 并且用户会看到结果。

但是,让我们考虑一些微不足道的情况,当用户操作只有 UI 后果而没有相关或操纵数据时。例如:一个按钮,当单击它时,会切换另一个 UI 小部件的可见性。

我的问题是如何在正确应用 MVVM 的同时处理这个简单的案例?我应该在不通知 ViewModel 的情况下直接更新 UI 吗?

4

1 回答 1

1

首先,对于所有与 UI 相关的事情,您绝对应该通知 ViewModel。您可以在 ViewModel 中按如下方式定义事件。BTW _itemClickedEvent 为封装定义。

private val _itemClickedEvent = MutableLiveData<Boolean>()

var itemClickedEvent: LiveData<Boolean> = _itemClickedEvent

fun itemClickedEvent(state: Boolean) {
    _itemClickedEvent.value = state
}

之后,您可以通过 viewModel 对象为您的场景调用 itemClickedEvent。

button.setOnClickListener {
            viewModel.itemClickedEvent(true)
        }

通过观察 LiveData,您可以进行可见性或任何其他与 UI 相关的事情,如下所示

viewModel.itemClickedEvent.observe(this, Observer {isItemClicked->
        if(isItemClicked){
            // Do your changes
        }
    })
于 2019-05-14T03:34:38.093 回答