微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在自定义视图中应该在哪里调用 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 举报,一经查实,本站将立刻删除。