gpt4 book ai didi

android - 使用导航组件时如何设置对话框的目标 fragment

转载 作者:IT老高 更新时间:2023-10-28 13:39:46 25 4
gpt4 key购买 nike

我正在使用 childFragmentManager 的 fragment 内或使用 supportFragmentManager 的 Activity 内显示一个对话框,在此过程中我想设置目标 fragment ,如下所示:

val textSearchDialog = TextSearchDialogFragment.newInstance()
textSearchDialog.setTargetFragment(PlaceSearchFragment@this, 0)

但是在运行该代码时出现错误:

java.lang.IllegalStateException: Fragment TextSearchDialogFragment{b7fce67 #0 0} declared target fragment PlaceSearchFragment{f87414 #0 id=0x7f080078} that does not belong to this FragmentManager!

我不知道如何访问导航组件用来管理 fragment 显示的 FragmentManager,有解决方案吗?

最佳答案

更新:作为 Navigation 2.3.0 的一部分,Navigation 添加了对 returning a result 的显式支持在 returning a result from a Dialog destination 上有一个特定的部分作为使用共享 ViewModel 的替代方法。

上一个答案:

fragment 与导航架构组件之间通信的推荐模式是通过 shared ViewModel - 通过使用 ViewModelProvider(getActivity())

检索 ViewModel 实现的 Activity 级别的 ViewModel

根据 the documentation ,这提供了许多好处:

  • The activity does not need to do anything, or know anything about this communication.
  • Fragments don't need to know about each other besides the SharedViewModel contract. If one of the fragments disappears, the other one keeps working as usual.
  • Each fragment has its own lifecycle, and is not affected by the lifecycle of the other one. If one fragment replaces the other one, the UI continues to work without any problems.

您还可以使用 navigation graph scoped ViewModel 在比整个 Activity 更小的范围内共享 ViewModel。 .

关于android - 使用导航组件时如何设置对话框的目标 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50752026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com