В DataBinding ViewModel знает о View?

введите сюда описание изображения

Судя по этой картинке - View Model знает о View, я правильно понимаю?


Ответы (2 шт):

Автор решения: ЮрийСПб

ViewModel не знает о View.

Вы, создав экземпляр ViewModel, даёте ссылку на него вьюхе (фрагмент, активити, etc). View передаёт во ViewModel данные, берёт из неё данные и вызывает методы оной.

DataBinding работает аналогично - вы объявляете в разметке какой класс, наследующий ViewModel используется в разметке и потом явно из View передаёте экземпляр ViewModel в разметку.

→ Ссылка
Автор решения: Nuclominus

ViewModel не знает про View напрямую. Между ними есть прослойка Data Binding mapper-а, как собственно на картинке и показано.

Есть два сценария использования databinding-а:

  1. Односторонний dataBinding: Просто привязать liveData или observable из viewModel к UI-ному компоненту. Например, отображение кнопки(visibility) на UI по состоянию булевской liveData из viewModel

  2. Двухсторонний dataBinding: Использовать observable филды или написать свой binding adapter для связи. Например, используется для решений задач с вводом текста из EditText, так чтобы изменение значения филда сразу обновляли значение в EditText и на оборот или же написать свой binding adapter, чтобы сразу отобразить список из viewModel в recyclerView и тд.

Но я бы не рекомендовал его использовать, особенно в рамках большого проекта. Магии в нём нет. Databinding генерирует довольно много кода из-за чего время сборки проекта увеличится. На маленьких проектах в 3-5 простых вьюх думаю можно побаловаться.

→ Ссылка