因此,我在BaseActivity类的onCreate()方法中实现了此侦听器,该类是我所有活动的扩展。此方法已被弃用。监听附加的片段的职责已移交给FragmentManager。您可以通过在构造函数中调用FragmentManager.addFragmentOnAttachListener(FragmentOnAttachListener)将侦听器添加到此Activity的FragmentManager中,以在片段直接附加到Activity的FragmentManager时获取回调。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_binding = getViewBinding()
setContentView(_binding!!.root)
val fm = supportFragmentManager
val listener = FragmentOnAttachListener {
fragmentManager, fragment ->
// Respond to the fragment being attached.
}
fm.addFragmentOnAttachListener(listener)
}
源文件解释:
用于在 Fragment.onAttach(Context) 后立即接收回调的监听器。这可以用于在子片段附加或片段经历 Fragment.onCreate(Bundle) 之前执行任何其他设置/提供片段可能需要的任何依赖项。在片段附加到其主机后调用。这是在 Fragment.onAttach(Context) 被调用之后,但在任何子片段上调用 Fragment.onAttach(Context) 之前立即调用的。
在 MainActivity 中,我使用导航组件设置了 ButtomNavigationView。问题是当应用程序第一次运行时,会调用 fragments onAttach(),此监听器会在 onAttach() 之前立即接收回调,但在下一次手动调用 onAttach() 时,监听器不会再次接收回调。为了明确起见,我的一个片段中有一个按钮,在其单击事件中,片段被刷新,因此 onAttach() 再次被调用。发生这种情况时,FragmentOnAttachListener 不起作用。有谁能帮我解决为什么监听器不再接收回调的问题吗?提前感谢。