如何在父片段和子片段中的片段之间共享 ViewModel

4

我有一个包含子Fragment的父Fragment。在子Fragment内部,我有一个带有Fragments的ViewPager。我的问题是如何在父子Fragment和ViewPager中共享ViewModel,并使ViewModel仅在ParentFragment范围内可见?


你可以在视图页面内的片段上尝试此方法。调用一次将为您提供托管视图页面本身的子片段,然后在返回的引用上再次调用此方法以获取父片段引用:https://developer.android.com/reference/androidx/fragment/app/Fragment#getParentFragment() - Jeel Vankhede
请查看此链接 https://dev59.com/L7voa4cB1Zd3GeqPyisN#61974340 - denvercoder9
2个回答

2
当你说“仅在ParentFragment范围内可见”时,你是指什么?
根据Google的文档,有一种方法可以共享ViewModel。请查看此文档:https://developer.android.com/topic/libraries/architecture/viewmodel#sharing 简而言之,您的父片段和子片段将使用相同的ViewModel。您的父片段将调用ViewModel的函数来更改数据,您的子片段只需观察ViewModel的LiveData即可。

我的子片段和父片段使用相同的模型。但是我如何在ViewPager的片段中使用相同的模型呢? - Rasul
1
你尝试使用 "by activityViewModels()" 在ViewPager的片段中获取共享ViewModel了吗? - NhatVM

-1

你可以将你的 sharedViewModel 放置在 Activity 中。然后,你可以使用以下代码从每个附加到该 Activity 的 Fragment 中访问它:

(requireActivity() as MainActivity).viewModel;

通过这种方法,您可以从一个片段设置数据并从另一个片段观察数据。因此,您可以在两个片段之间实现通信。
设置数据:
viewModel.liveDataObject.value = value

观察数据:

viewModel.liveDataObject.observe(viewLifecycleOwner) {}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接