Как иметь отдельный экземпляр 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