Android MVVM как получить ответ от ViewModel во View

У меня есть активити, у нее есть viewmodel. Viewmodel во время инициализации скачивает с сервера с помощью retrofit данные в json. Эти данные преобразуются в список объектов во viewmodel. И теперь мне нужно использовать эти данные во View. Т.е. предупредить активити о том, что оно может использовать список из viewmodel. Пробовал это сделать с помощью интерфейсов, но интерфейсы не инициализируются в viewmodel. Как можно это сделать по другому?


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

Автор решения: Sergei Buvaka

Вот вам небольшой пример как это делается.

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

→ Ссылка