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

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

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

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

это внутри Menu Fragment

  private val viewModel: HomeViewModel by lazyViewModelActivityScope()

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

0 ответов

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

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

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