问题描述
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 (将#修改为@)