Как иметь отдельный экземпляр ViewModel в каждом фрагменте и совместно использовать данные между Viewmodels - PullRequest
0 голосов
/ 02 марта 2019

Я работаю над приложением для Android TV. У меня есть фрагмент (основной фрагмент), а внутри фрагмента есть боковое меню, каждый пункт меню создает новый фрагмент (фрагмент меню).У меня есть Viewmodel и в ViewModel у меня есть конфигурационные данные, которые я загружаю, когда я создаю основной фрагмент.А данные фрагмента меню основаны на данных, которые я получаю от вызовов API и от данных конфигурации

Я создал один экземпляр модели представления с жизненным циклом действия.Но проблема в том, что, когда я перемещаюсь от одного фрагмента к другому, например, из 1-2 фрагментов, и когда 1 фрагмент уже загружен, данные liveata не пусты и переходят ко 2-му фрагменту перед извлечением данных второго фрагмента, которые он наблюдает / отображает liveataиз первого фрагмента, а затем его собственного, после того, как он получает свои данные. Я думаю, что у каждого фрагмента должен быть свой экземпляр, но мне также нужны данные, которые должны быть разделены (конфиг) между каждым экземпляром viewmodel?Как я могу это сделать?

  private val viewModel: HomeViewModel by lazyViewModelActivityScope()
viewModel.fetch()
   viewModel.configData.observe(viewLifecycleOwner, Observer { it ->
  loadData(it)
})

это внутри MenuFragment

  private val viewModel: HomeViewModel by lazyViewModelActivityScope()

 viewModel.fetchMenuPage(menuItem)
      viewModel.carouselsWithAssetsData.observe(viewLifecycleOwner, Observer { carouselWithAssets ->
    carouselWithAssets.forEach { carouselWithAsset ->
      mRowsAdapter.add(createCardRow(carouselWithAsset))
    }
  })

1 Ответ

0 голосов
/ 12 марта 2019

Я получил ответ на свой вопрос, и я хочу поделиться им с другими

Я думаю, что в общем случае это то, чем вы будете управлять с помощью DI (добавление одной и той же конфигурации в обе модели представления)

Или каждый фрагмент должен был бы передать данные вида деятельности в ViewModel фрагмента.Или вы можете иметь глобальные LiveData, которые управляют самим собой (загрузка данных в onActive()) и полностью пропустить действие ViewModel

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