Как использовать шаблон MVVM с помощью привязки данных - PullRequest
0 голосов
/ 05 декабря 2018

Я работаю над приложением, в котором есть форма входа в систему. Я немного запутался с шаблоном, так как не понимаю, как открыть новое действие, когда мой вход в систему успешен. Согласно моему пониманию, когда янажмите кнопку «Отправить» - метод в viewmodel, который аутентифицируется, получит вызов, и после успешного входа в систему я не знаю, как перейти к файлу активности, чтобы я мог вызвать новую активность.

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы можете просто внедрить прослушиватель кликов в действие и управлять открытием нового действия оттуда.Насколько я знаю, ViewModel следует использовать только для сохранения данных или для другой связи с репозиторием / моделью.Не следует использовать для навигации.

Хотя, если вы хотите использовать, вы можете использовать класс AndroidViewModel, который предоставляет объект контекста, который можно использовать для перехода к другому действию / фрагменту.

0 голосов
/ 05 декабря 2018

Правило большого пальца:

Ни один пакет из 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.

0 голосов
/ 05 декабря 2018

для этого вы можете использовать AndroidViewModel, который дает контекст приложения, а затем с помощью намерения вы можете перейти к новому действию.

...