В DataBinding ViewModel знает о View?
Ответы (2 шт):
ViewModel не знает о View.
Вы, создав экземпляр ViewModel, даёте ссылку на него вьюхе (фрагмент, активити, etc). View передаёт во ViewModel данные, берёт из неё данные и вызывает методы оной.
DataBinding работает аналогично - вы объявляете в разметке какой класс, наследующий ViewModel используется в разметке и потом явно из View передаёте экземпляр ViewModel в разметку.
ViewModel не знает про View напрямую. Между ними есть прослойка Data Binding mapper-а, как собственно на картинке и показано.
Есть два сценария использования databinding-а:
Односторонний dataBinding: Просто привязать liveData или observable из viewModel к UI-ному компоненту. Например, отображение кнопки(visibility) на UI по состоянию булевской liveData из viewModel
Двухсторонний dataBinding: Использовать observable филды или написать свой binding adapter для связи. Например, используется для решений задач с вводом текста из EditText, так чтобы изменение значения филда сразу обновляли значение в EditText и на оборот или же написать свой binding adapter, чтобы сразу отобразить список из viewModel в recyclerView и тд.
Но я бы не рекомендовал его использовать, особенно в рамках большого проекта. Магии в нём нет. Databinding генерирует довольно много кода из-за чего время сборки проекта увеличится. На маленьких проектах в 3-5 простых вьюх думаю можно побаловаться.
