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