сколько моделей представлений я должен использовать в своем фрагменте, если я использую SharedViewModel для передачи данных? - PullRequest
1 голос
/ 31 марта 2020

Я использую компонент навигации, и мне нужно передать данные обратно из фрагмента B обратно во фрагмент A. Я прочитал из здесь , что мне нужно использовать SharedViewModel .

скажем, например, у меня есть RestaurantListFragment, которые показывают список ресторанов. для работы с сетью и бизнес-логикой c для этого фрагмента я делаю RestaurantListViewModel.

второй фрагмент, который у меня есть, RestaurantDetailFragment. и для обработки некоторых действий и бизнес-логики c в этом фрагменте я создаю RestaurantDetailViewModel.

, теперь мне нужно передать данные из RestaurantDetailFragment обратно в RestaurantListFragment, и сказано, что мне нужно использовать SharedViewModel. но теперь я в замешательстве.

если я использую SharedViewModel для передачи данных, то у меня будет 2 viewModel во фрагменте? в RestaurantDetailFragment у меня будет RestaurantDetailViewModel и XSharedViewModel, а в RestaurantDetailFragment у меня будет RestaurantListViewModel и XSharedViewModel?

, поэтому в SharedViewModel он содержит только данные, которые необходимо передать обратно к предыдущему фрагменту?

или мне просто нужно сделать одну модель представления (SharedViewModel), которая будет обслуживать мои два фрагмента? (Мне больше не нужно создавать RestaurantDetailViewModel и RestaurantListViewModel). Я запутался.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Вы должны создать только одну модель просмотра только для совместного использования или повторного использования данных между 2 фрагментами. Концепция SharedViewModel заключается в том, что он создаст один объект и сохранит результат в LiveData модели представления и будет снова использован в другом фрагменте в рамках одного прикрепленного к нему жизненного цикла действия.

Вы можете взять справочная форма это Github Project , если вы хотите

0 голосов
/ 31 марта 2020

Оба подхода работают:

  1. Вы можете использовать SharedViewModel только для данных и методов, которые совместно используются между RestaurantDetailFragment и RestaurantListFragment, и сохранять логику c, то есть необходимо только для RestaurantListFragment, но не для RestaurantDetailFragment в RestaurantListViewModel и наоборот.

  2. В любом случае вы также можете поместить все свои логики c из RestaurantDetailViewModel и RestaurantListViewModel внутри SharedViewModel и избавьтесь от 2 других ViewModels. Хотя это не приведет к ошибкам, оно нарушает разделение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...