Android MVVM как получить ответ от ViewModel во View
У меня есть активити, у нее есть viewmodel. Viewmodel во время инициализации скачивает с сервера с помощью retrofit данные в json. Эти данные преобразуются в список объектов во viewmodel. И теперь мне нужно использовать эти данные во View. Т.е. предупредить активити о том, что оно может использовать список из viewmodel. Пробовал это сделать с помощью интерфейсов, но интерфейсы не инициализируются в viewmodel. Как можно это сделать по другому?
Ответы (1 шт):
Вот вам небольшой пример как это делается.
ViewModel:
class ViewModel(private val dataSource: DataSource) :
BaseViewModel() {
val movieLiveData = MutableLiveData<MovieModel>()
fun searchMovie(query: String) {
backgroundScope.launch {
val result: MovieModel = dataSource.get()
movieLiveData.postValue(result)
}
}
}
Activity:
searchViewModel.movieLiveData.observe(this, Observer {movie ->
handleResult(movie)
})
Суть в том, что ViewModel ничего не должна знать о View (Activity/Fragment). View просто подписывается на LiveData которая находится внутри ViewModel и ждет оповещений. Когда ViewModel хочет отправить какой-то результат во View она просто постит значение в LiveData, а все подписчики его обрабатывают.
А вот тут есть отличный урок как работать с ViewModel