我正在研究Android TV应用程序我有一个片段(主片段)和里面片段有侧面菜单,每个菜单项创建新片段(菜单片段)。我有Viewmodel,在ViewModel中我有配置了liveata,我在创建主片段时加载它。而Menu Fragment的数据基于我从API调用和配置数据中获取的数据
我已经使用活动生命周期创建了viewmodel的单个实例。但问题是当我从一个片段导航到另一个片段时,例如从1-2片段导航,并且由于1个片段已经加载了数据,所以livingata不是空的并且在获取第二个片段数据之前导航到第二个片段,它观察/显示了livingata从第一个片段开始,然后在它获取数据之后它自己我认为每个片段应该有它自己的实例,但我还需要在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))
}
})
我得到了我的问题的答案,我想与其他人分享
我认为通常这是你用DI管理的东西(在两个ViewModels中注入相同的配置)
或者每个Fragment都需要将活动ViewModel的数据传递给Fragment的ViewModel。或者您可以拥有一个管理自身的全局LiveData(在onActive()
中加载数据)并完全跳过ViewModel活动