Разделяется viewmodel между фрагментами, без прицеливания на активность? - PullRequest
0 голосов
/ 20 ноября 2018

Используя новый компонент архитектуры навигации, я получил одно действие в качестве навигационного хоста с несколькими фрагментами для моих экранов.Прямо сейчас у меня есть EditProfileFragment, где пользователь может нажать кнопку, и открывается другой фрагмент со списком стран на выбор.Допустим, я хочу поделиться результатом выбора страны обратно в EditProfileFragment.Общая идея заключается в том, что у меня будет один EditProfileViewModel для всех действий «редактировать профиль».

  1. Как мне разделить выбранную страну между этими фрагментами?Я подумываю об использовании совместно используемой модели представления, но я не решаюсь ограничить ее действием, поскольку не хочу, чтобы оно сохранялось, когда пользователь завершает поток редактирования профиля.

  2. Есть ли другие чистые / рекомендуемые подходы, которые я должен рассмотреть?Может быть, синглтон, который временно содержит это значение?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Отвечая на мой собственный вопрос о том, как я решил эту проблему для дальнейшего использования:

Поскольку я хотел сохранить соотношение 1-к-1 между ViewModel-View (контроллер) / Fragment, я выбрал UserRepository который содержит объект "временного состояния" для подобных случаев.

0 голосов
/ 26 ноября 2018

На самом деле проще с моделью общего представления, но, как вы сказали, она связана с другими проблемами, такими как определение модели представления в более высоком контексте для простого обмена информацией.

Модель общего представления IMHO неплохаяподход в определенных сценариях.Я работал над приложением, которое имеет 5 вкладок, первая вкладка была похожа на сводку 2-й и 3-й.Это был хороший выбор - использовать модель общего представления, поскольку я просто повторно использовал данные, просто менял количество отображаемых адаптером элементов в соответствующих представлениях, повторное использование логики.

Похоже, у вас общая логика /элементы в вашем профиле и странице редактирования профиля.Я не знаю, сколько, но если вы чувствуете, что недостаточно разделить модель представления между этими двумя, помните, просто потому, что вы используете модели представления, не означает, что вы должны использовать их, чтобы делиться / хранить / передавать некоторыеданные.Например:

  • Перейти к предыдущему фрагменту с полученными данными.
  • Вы можете сохранить «профиль» в постоянное состояние и изменить то, что хранится.Когда ваша модель представления для профиля (повторно) создается, она получает последнее значение из постоянства.
  • Вы можете обновить свой профиль на сервере напрямую и снова загрузить его в профиль.
  • Вы можетесмешайте эти два выше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...