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