Android MVVM: если представление уведомляет модель представления о каждом пользовательском взаимодействии, даже о тривиальных (только имеют последствия пользовательского интерфейса / нет данных) - PullRequest
0 голосов
/ 14 мая 2019

По моим небольшим знаниям:

В архитектурном шаблоне MVVM (Model-View-ViewModel) представление должно уведомить модель представления о пользовательских взаимодействиях, таких как нажатие кнопок. модель представления отвечает обновлением своих наблюдаемых потоков данных (LiveData) что мнение будет наблюдать. Следовательно, представление обновит интерфейс и пользователь видит результат.

Но давайте рассмотрим тривиальный случай, когда действия пользователя имеют только последствия пользовательского интерфейса без каких-либо данных или манипуляций с ними. Например: кнопка, при нажатии которой переключается видимость другого виджета пользовательского интерфейса.

Мой вопрос заключается в том, как справиться с этим простым делом при правильном применении MVVM? Должен ли я напрямую обновлять интерфейс без уведомления ViewModel?

1 Ответ

0 голосов
/ 14 мая 2019

Прежде всего, для всех вещей, связанных с пользовательским интерфейсом, вы должны абсолютно уведомить ViewModel.Вы можете определить событие следующим образом в ViewModel.BTW _itemClickedEvent определен для инкапсуляции.

private val _itemClickedEvent = MutableLiveData<Boolean>()

var itemClickedEvent: LiveData<Boolean> = _itemClickedEvent

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

После этого вы можете вызывать itemClickedEvent через объект viewModel для вашего сценария.

button.setOnClickListener {
            viewModel.itemClickedEvent(true)
        }

Наблюдая LiveData, вы можете сделать свою видимость или любой другой связанный пользовательский интерфейс связанным свещи, как показано ниже

viewModel.itemClickedEvent.observe(this, Observer {isItemClicked->
        if(isItemClicked){
            // Do your changes
        }
    })
...