Суть MVVM и главное отличие от MVP в том, что View наблюдает за обновлениями ViewModel, при этом ViewModel не знает ничего о View.
Такое поведение реализуется через паттерн
Observable-Observer и/или связывание данных (data binding).
Существуют следующие способы реализации MVVM в Android:
1. Использование Data Binding библиотекиЭта библиотека помогает связать ViewModel и UI приложения. ViewModel объявляется как источник данных в лэйаутах соответствующих активити или фрагмента. После этого в элементах лэйаута добавляется связывание с полями ViewModel:
<TextView android:text="@{viewmodel.userName}" />Библиотека Data Binding генерирует код, который обеспечивает связывание. При обновлении поля
userName, обновится текст в
TextView.
2. Использование ViewModel и LiveDataViewModel (класс 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.
Кастомная реализация добавляет больше гибкости, но нужно самому заботиться о сохранении состояния.