如何在 Android 的 Fragment 和 DialogFragment 之间共享 ViewModel?

18

如何在对话框(Dialog)和对话框碎片(DialogFragment)之间共享同一个viewModel?我知道viewModel可以在Activity作用域内共享,但这个作用域对我来说过于大了。

 private val model: SharedViewModel by activityViewModels()

很遗憾,我没有一个项目导航组件。


你同时显示对话框和对话框片段吗? - Công Hải
是的。我展示片段并在其上展示对话框片段。我在片段和对话框片段中运行相同的请求以更新UI。 - kkkkk
你想在Fragment和DialogFragment之间共享吗? - Công Hải
是的。只有它们之间。 - kkkkk
让我们在聊天中继续这个讨论 - kkkkk
显示剩余3条评论
1个回答

32
  1. 使用 childFragmentManager 来显示 DialogFragment

  2. Fragment 中声明共享的 ViewModel,方法是

private val sharedViewModel: YourViewModel by viewModels()
  1. DialogFragment中声明ViewModel
private val sharedViewModel: YourViewModel by viewModels(ownerProducer = { requireParentFragment() })

非常感激。描述得很好。 - Pranav P
2
有没有更新版本,可以展示如何使用Android导航? - shinta
@shinta,你可以使用相同的“by viewModels”委托,因为导航组件也使用了“childFragmentManager”。 - Xam
相反的情况怎么样,获取由对话框打开的片段的viewModel。所以我需要在父(对话框)和子片段之间使用ViewModel? - Mahmoud Mabrok

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