Я следую схеме MVVM в моем приложении для Android. Вот файлы, о которых я буду говорить:
PresentContestsFragment
PresentContestsViewModel
вот моя модель кода зрения:
private val _contests = MutableLiveData<List<ContestsShortInfoModel>>()
val contests:LiveData<List<ContestsShortInfoModel>>
get() = _contests
fun getContests() {
viewModelScope.launch{
val contestLiveData = repository.getLiveContests()
contestLiveData.observeForever {
_contests.value = it
}
}
}
Вот мой код класса фрагмента
В onActivityCreated я вызываю viewModel.getContests (), а затем bindUI ()
private fun bindUI() {
viewModel.contests.observe(this, Observer { list ->
list?.let{
// show this list in UI
}
})
}
все работает хорошо, и мой интерфейс обновляется. Я хочу спросить, нормально ли это вызывать наблюдением в модели представления. Если нет, то как мне удалить наблюдателя?
Если у вас есть лучший способ сделать это, скажите, пожалуйста, также.
Помните, что когда я вызываю getLiveContests из репозитория, а затем в репо, я проверяю, есть ли необходимость получать свежие данные из Интернета или нет. В любом случае, я возвращаю LiveData из комнаты БД. Если были получены новые данные, они сохраняются в комнате, и, поскольку я вернул LiveData, я также получаю обновления в пользовательском интерфейсе.