Такое поведение реализуется через паттерн Observable-Observer и/или связывание данных (data binding).
Существуют следующие способы реализации MVVM в Android:
1. Использование Data Binding библиотеки
Эта библиотека помогает связать ViewModel и UI приложения. ViewModel объявляется как источник данных в лэйаутах соответствующих активити или фрагмента. После этого в элементах лэйаута добавляется связывание с полями ViewModel:
<TextView android:text="@{viewmodel.userName}" />
Библиотека Data Binding генерирует код, который обеспечивает связывание. При обновлении поля
userName
, обновится текст в TextView
.2. Использование ViewModel и LiveData
ViewModel (класс Architecture Components) реализован так, что переживает пересоздание активити и фрагментов. При использовании этого класса можно не беспокоиться о сохранении состояния, когда изменяется конфигурация.
LiveData – класс, реализующий паттерн
Observable
. LiveData
принимает как наблюдателей объекты, которые реализуют интерфейс LifecycleOwner, например Activity
и Fragment
. Благодаря этому LiveData
автоматически отписывает подписчиков при вызове onDestroy()
.Data Binding может использоваться совместно с
ViewModel
и LiveData
.3. Кастомная реализация
Существует множество способов реализации связи между View и ViewModel, кроме предоставляемых библиотеками от Google.
Например ViewModel может использовать
Observable
из RxJava
и View будет подписываться на обновления ViewModel так же как ViewModel подписывается на обновления Model.Кастомная реализация добавляет больше гибкости, но нужно самому заботиться о сохранении состояния.