片段附加到其主机后,每次都不会调用 FragmentOnAttachListener

Posted

技术标签:

【中文标题】片段附加到其主机后,每次都不会调用 FragmentOnAttachListener【英文标题】:FragmentOnAttachListener not called every time after the fragment has been attached to its host 【发布时间】:2021-11-07 11:25:03 【问题描述】:

在最近 google 对 android 的更改中,Fragment 1.3.0 版本还添加了一个新的 FragmentOnAttachListener 接口来替换不太灵活的 onAttachFragment 方法。如document 中提到的:

此方法已弃用。的责任 侦听附加的片段已移至 片段管理器。您可以向此活动添加一个侦听器 通过调用 FragmentManager FragmentManager.addFragmentOnAttachListener(FragmentOnAttachListener) 在您的构造函数中获取附加片段时的回调 直接到 Activity 的 FragmentManager。

所以我在 BaseActivity 类的 onCreate() 方法中实现了这个监听器,我的所有活动都从它扩展而来:

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(上下文)。这可用于执行任何额外的 设置/提供片段之前可能需要的任何依赖项 正在附加的子片段或正在经历的片段 Fragment.onCreate(Bundle)。在附加片段后调用 给它的主人。这会在之后立即调用 Fragment.onAttach(Context) 和之前 Fragment.onAttach(Context) 有 被任何子片段调用。

在 MainActivity 中,我设置了带有导航组件的 ButtomNavigationView。问题是当应用程序第一次运行片段 onAttach() 调用时,此侦听器会在 onAttach() 之前立即收到回调,但在下次手动调用 onAttach() 时,侦听器不会收到回调。为了清楚起见,我的一个片段中有一个按钮,在它的点击事件中,片段被刷新,等等 onAttach() 再次被调用。发生这种情况时,FragmentOnAttachListener 不起作用。谁能帮我为什么听众没有再次收到回调?提前致谢。

【问题讨论】:

【参考方案1】:

同样的行为,再次使用Activity.onAttachFragment或Fragment.onAttachFragment

我认为,这是一个错误。我们需要发布一个问题

【讨论】:

以上是关于片段附加到其主机后,每次都不会调用 FragmentOnAttachListener的主要内容,如果未能解决你的问题,请参考以下文章

多次调用片段 onCreateView

在Fragment上不调用onOptionsItemSelected()方法

片段事务分离和附加后ListView不工作?

每次重启后都会添加片段(Android)

如何一个接一个地打开同一片段但具有不同数据的多个实例?

如果在片段和活动中都定义了 onRequestPermissionsResult,则不会在片段中调用