在自定义视图中应该在哪里调用 findViewTreeLifecycleOwner()?

问题描述

Fragment 1.3.0 引入了 view.findViewTreeLifecycleOwner() 方法获取视图的生命周期所有者。在片段中,此方法null 之前返回 onViewCreated()

我使用协程在自定义视图中进行了一些初始化,因此我需要调用 findViewTreeLifecycleOwner().lifecycleScope获取协程范围。在视图中调用它的最佳位置是什么?

起初我试图在构造函数调用它,因为它是为初始化而制作的,但它在片段的 onViewCreated() 之前调用,因此该方法返回 null。 所以我试着把它放在 onAttachedToWindow() 中,它在那里工作,但我真的不知道在这里做初始化的东西是否是个好主意。

class TestView @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0) : LinearLayout(context,attrs,defStyleAttr) {

    init {
        // return null here as constructor is called before fragment's onViewCreated()
        findViewTreeLifecycleOwner()!!.lifecycleScope.launchWhenStarted { 
            ...
        }
    }

    override fun onAttachedToWindow() {
        super.onAttachedToWindow()
        // here it works because it's called after  fragment's onViewCreated()
        findViewTreeLifecycleOwner()!!.lifecycleScope.launchWhenStarted {
            ...
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)