Правило большого пальца:
Ни один пакет из Android. * Не должен лежать во ViewModel.Вы можете игнорировать импорт пакетов для ViewModel
Кроме того, вы также можете сделать это с обычным ViewModel.
Как продолжить?
Позволяет сделать этопросто.Предположим, вы создаете страницу входа в систему.
Позволяет иметь в нижней части самой модели ViewModel следующие вещи:
- поля электронной почты и пароля с двусторонней привязкой
- логика проверки формы
- Событие нажатия кнопки
- Вызов API
Все эти вещи находятся в вашей ViewModel.
Теперь ваша активность должна реагировать на результат вашего вызова API.Итак, пусть ваша ViewModel имеет отдельную LiveData, где T - это тип ответа от вашего вызова API.
Например:
val loginApiStatus = MutableLiveData<LoginResponse>()
А затем позвольте вашей Деятельности наблюдать эти LiveData.Это следует соблюдать в onStart()
методе Деятельности.Я объясню вам причину наблюдения в onStart()
.
viewModel.loginApiStatus.observe(this, Observer{ loginResponse->
// respond accordingly
})
Теперь, как только вы получите ответ от Api, просто обновите LiveData в вашей ViewModel как:
loginApiStatus.value = loginResponse // Login Api Response
С этой структурой вы получаете полный контрольнад обработкой Api Response.Даже если ваша активность переходит в фоновый режим, после запуска Api Call у вас все равно будет состояние того, что произошло с этим вызовом Api.Теперь, когда вы вернетесь к экрану входа снова из фона, вы снова начнете наблюдать LiveData (потому что мы наблюдаем состояние LiveData в onStart()
, как я уже говорил ранее), и вы получите состояние, на которое вы будете реагировать.
Жизнь становится намного проще, когда вы начинаете сохранять состояния вашего View / Fragment / Activity в самой вашей ViewModel.