如何在每个片段中拥有单独的ViewModel实例,并在Viewmodels之间拥有共享数据

问题描述 投票:0回答:1

我正在研究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))
    }
  })
android viewmodel android-architecture-components android-livedata
1个回答
0
投票

我得到了我的问题的答案,我想与其他人分享

我认为通常这是你用DI管理的东西(在两个ViewModels中注入相同的配置)

或者每个Fragment都需要将活动ViewModel的数据传递给Fragment的ViewModel。或者您可以拥有一个管理自身的全局LiveData(在onActive()中加载数据)并完全跳过ViewModel活动

© www.soinside.com 2019 - 2024. All rights reserved.