Проблема довольно проста. Вопрос в контексте использования ViewModels, LiveData и других связанных жизненного цикла Подходит знающая арка.
У меня есть Activity с NavDrawer, который переключает фрагменты внутри.
А еще у меня есть случай, когда на экране одновременно присутствуют два фрагмента - это будет основная боль. Один фрагмент имеет ViewPager с вложенным Fragments
(не спрашивайте почему). Другой фрагмент просто получает информацию от первого, когда пользователь выполняет какие-то действия. Это достигается просто путем совместного использования модели просмотра активности. Но в самом приложении много бизнес-логики, и по мере продвижения модель просмотра становится все больше и больше.
Я хочу спросить - не квитанцию или правила, как это исправить, или, может быть, как это преодолеть, исправив всю структуру проекта. Я хочу попросить совета, как применить подход MVVM в стиле android.arch.lifecycle к моему варианту использования.
Я не видел чего-то более сложного, чем просто совместное использование Activity ViewModel между фрагментами. Но обычное дело, это не лекарство.
То, что вы здесь видите - на самом деле беспорядок. Дело в том, что все разделяют ActivityViewModel
. Соединения (агрегация) от FirstFragment означают, что ViewPager
внутри FirstFragment
инициирует ChildFragments
, и они также работают с тем же ActivityViewModel
(убейте меня). В результате все работают с одной общей ViewModel.
Мое предложение - добавить ViewModel для каждого слоя. Так что Activity / Fragments / ChildFragments имеют свои собственные ViewModels. Но что здесь появляется - как нам тогда общаться?
Возможные решения:
- Наличие двух ViewModels на один компонент. Одна ViewModel будет обрабатывать / делегировать бизнес-логику, а другая - обеспечивать связь. Две модели просмотра на компонент - не очень хорошо, да?
- Старый интерфейс (пожалуйста, нет!)
Другие обходные пути - например, прослушиватели изменений DB / SharedPrefs / Realm и шины событий (Я слишком стар для этого :().
Ваше решение здесь!
Я скажу, что все вышеперечисленное нарушает многие принципы дизайна, так что мне делать? Как мне выйти из этого беспорядка? Кто-нибудь Uncle Bob
или другой superhero
здесь, чтобы помочь?
P.S. - Что ж, создание UML или других диаграмм не моя сильная сторона. Простите за это.
PPS - мне известно о google < href = "https://github.com/googlesamples/android-architecture" rel = "noreferrer"> образцы.