Обмен данными между фрагментами в едином потоке с использованием Android Dagger Hilt - PullRequest
0 голосов
/ 07 августа 2020

TL; DR: Как обмениваться данными в одном потоке с использованием компонента Dagger / Hilt, но не модели общего представления?

Я пытаюсь принять подход, показанный в Android docs , который использует ручное внедрение зависимостей в Dagger-Hilt Dependency Injection, используя шаблон MVVM-Repository .

Вот поток входа моего приложения: iamge

У меня 2 фрагмента:

  • UsernameFragment - он использует UserNameViewModel,
  • PasswordFragment - он использует PasswordViewModel.

Я знаю, что данные между ними могут совместно использоваться:

  • модель общего представления,
  • родительская активность (вероятно, немного устарела).

Однако использование модели общего представления означало бы тесную связь этих 2 фрагменты. (Давайте представим, что я бы снова использовал эти 2 фрагмента, но в потоке регистрации, где были добавлены некоторые дополнительные экраны - например, PersonalInfoFragment. Поэтому я решил создать независимую модель представления для каждого из них).

Однако, если, вы читаете документы Google по ссылкам выше, вы заметите, что они используют что-то вроде объекта l oginData в их « контейнере входа в систему ». В этом случае для меня его использование ясно.

Однако, когда они объясняют тот же пример, используя Dagger2 , , они молча отбрасывают эту концепцию общих данных входа в систему через поток в «контейнере входа в систему» ​​(в данном случае - LoginComponent).

Я был бы признателен, если кто-нибудь мне поможет, как достичь той же цели (общие данные пользователя в «контейнере входа») показаны в ManualDI, но с использованием рукояти или кинжала.

PS . Используя Android NavigationUI, я создал вложенный граф, который занимает только эти 2 фрагмента, поэтому я Гарантировано, что использование моделей представления, ограниченных графом, обеспечит мне, что каждый раз, когда пользователь входит в этот поток входа в систему, модели представления будут «чистыми» (воссозданными). Однако это не решает проблему общего ресурса в «контейнере входа в систему» ​​

Редактировать Исправлено одно текстовое имя редактирования («Пароль») в прикрепленном изображении.

...