Как управлять вьюшками через класс ViewModel
Не понимаю как управлять вью, например CheckBoxом через MVVM во ViewModel классе, насколько я понял нужно обертать их в лайвдату и в классе фрагмента слушать через observe. Хотелось бы получить пример кода как это делается
Ответы (1 шт):
Автор решения: Shams
→ Ссылка
Чтобы подписаться на liveData в viewmodel cоздайте MutableLiveData и LiveData в viewModel
- MutableLiveData чтобы постит данные, так как вы не можете постит данные через liveData
- 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)
}