Как управлять вьюшками через класс ViewModel

Не понимаю как управлять вью, например CheckBoxом через MVVM во ViewModel классе, насколько я понял нужно обертать их в лайвдату и в классе фрагмента слушать через observe. Хотелось бы получить пример кода как это делается


Ответы (1 шт):

Автор решения: Shams

Чтобы подписаться на liveData в viewmodel cоздайте MutableLiveData и LiveData в viewModel

  1. MutableLiveData чтобы постит данные, так как вы не можете постит данные через liveData
  2. LiveData чтобы подписаться в фрагменте/активити

Код в viewModel

private val _checkBoxEvent = MutableLiveData<Boolean>()
val checkBoxEvent: LiveData<Boolean> = _checkBoxEvent

В фрагменте/активити подпишитесь на liveData

viewModel.checkBoxEvent.observe(this) { value ->
    // do something with value
}

Чтобы постит данные используйте mutableLiveData в viewModel

_checkBoxEvent.value = true

А чтобы передать какие-то данные из активити/фрагмент в viewmodel объявите функцию в viewmodel

fun onCheckBoxClicked(isChecked: Boolean) {
   //do something with value     
}

И в активити/фрагмент отправьте данные на viewmodel

checkBox.setOnCheckedChangeListener { _, isChecked ->
    viewModel.onCheckBoxClicked(isChecked)
}
→ Ссылка