我从FragmentManager的事务切换到JetPack的Navigation体系结构组件。这样做时,我不再可以调用:findFragmentById(int),这样我就可以获得对实例化片段的引用,从而可以从承载它的Activity中调用它的功能。
这样做的原因是,我无法获得自定义的DialogFragment来实现片段本身内部的侦听器,因此我将其在Main Actiity中实现。当DialogFragment进行交互时,我希望它通知该片段以调用某些函数。但是因为我无法在Fragment本身中注册侦听器,所以完全不知道用户单击了“取消”或“确认”按钮。
该活动从DialogFragment知道了用户的操作,因此它应该能够通知Fragment,以便Fragment可以调用其功能。
如何获得对导航片段的引用,以便调用其功能?
答案 0 :(得分:1)
首先,请检查我对您问题的理解,因为这是我回答的基准:
如果以上内容正确,那么我认为导航当前不支持此类功能,但是您可以:
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
}
}
答案 1 :(得分:0)
我只需要在与导航组件一起使用的应用程序中从活动的片段中调用该函数。我这样称呼下面的代码。
val searchFragment = supportFragmentManager.fragments[0].childFragmentManager.fragments[0] as SearchFragment
searchFragment.setSearchText(obj.getOriginalValue())