gpt4 book ai didi

android - 如何在 JetPack Navigation 组件中托管 fragment 的 Activity 中调用导航 fragment 函数?

转载 作者:行者123 更新时间:2023-11-29 00:51:26 25 4
gpt4 key购买 nike

我从 FragmentManager 的事务切换到 JetPack 的导航架构组件。这样做时,我无法再调用:findFragmentById(int) 以便我可以获得对实例化 fragment 的引用,从而从托管它的 Activity 中调用它的函数。

原因是我无法让我的自定义 DialogFragment 在 fragment 本身内部实现监听器,所以我在 Main Actiity 中实现了它们。当DialogFragment被交互的时候,我想让它通知fragment去调用一些函数。但是因为我无法在Fragment本身注册监听器,所以完全不知道用户点击了“取消”或“确认”按钮。

Activity 从 DialogFragment 知道用户的操作,然后它应该能够通知 Fragment,以便 Fragment 可以调用它的函数。

如何获取对导航 fragment 的引用以便我可以调用它的函数?

最佳答案

首先请检查我对您问题的理解,因为这是我回答的基准:

  1. 你有 Activity
  2. 它托管 fragment
  3. 该 fragment 打开对话 fragment 并想知道用户的对话结果

如果以上内容正确,那么我认为导航目前不支持开箱即用的功能,但是您可以:

  1. 使用共享 View 模型(例如在 Activity 级别),它具有某种一次性实时数据, fragment 被订阅并且对话 fragment 发送它的选择。所以基本上当对话 fragment 更改实时数据时,托管 fragment (或任何其他订阅者)会自动接收更改
  2. 使用像 Otto 这样的普通旧事件总线,只在 fragment 级别订阅事件并在对话 fragment 内发出事件?

PS.: 这是可能的一次性数据结构:

class OneTimeLiveData<T> : MutableLiveData<T>() {

private val pending = AtomicBoolean(false)

override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
super.observe(owner, Observer { t ->
if (pending.compareAndSet(true, false)) {
observer.onChanged(t)
}
})
}

@MainThread
override fun setValue(t: T?) {
pending.set(true)
super.setValue(t)
}

@MainThread
fun call() {
value = null
}
}

关于android - 如何在 JetPack Navigation 组件中托管 fragment 的 Activity 中调用导航 fragment 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59278700/

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