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

How to have separate instance of ViewModel in each Fragment and have shared data as well between Viewmodels

我正在开发 Android 电视应用 我有一个片段(主片段),片段内部有侧边菜单,每个菜单项都会创建新片段(菜单片段)。 我有 Viewmodel,在 ViewModel 中我有配置实时数据,我在创建主片段时正在加载这些数据。 菜单片段的数据基于我从 API 调用和配置数据

中获得的数据

我已经创建了具有 activity 生命周期的视图模型的单个实例。 但问题是当我从一个片段导航到另一个片段时,例如从 1-2 片段导航,并且由于 1 个片段已经加载数据,实时数据不为空并在获取第二个片段数据之前导航到第二个片段 observes/displays来自第一个片段的实时数据,然后在获取数据后它是自己的 我认为每个片段都应该有它自己的实例,但我还需要应该在 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 管理的东西(将相同的配置注入两个 ViewModel)

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