gpt4 book ai didi

android - 如何从自定义 View 访问宿主 fragment 的生命周期范围?

转载 作者:行者123 更新时间:2023-12-04 23:41:25 26 4
gpt4 key购买 nike

我需要在自定义 View 中使用协程。看完这篇talk , 我相信我最好的选择是使用 生命周期范围 作为协程作用域,这样在生命周期所有者被销毁时会自动取消。
但是,我似乎无法访问自定义 View 中的生命周期范围。根据documentation ,我们可以从生命周期对象访问它,如 lifecycle.coroutineScope或来自作为 lifecycleOwner.lifecycleScope 的生命周期所有者.但是自定义 View 不是生命周期所有者。那么我可以以某种方式访问​​ fragment 的生命周期范围吗?或者如果我不能,我应该使用哪个协程上下文?

最佳答案

我通过实现 LifecycleObserver 解决了这个问题界面。这在 free course on Udacity 的第 4 课中有很好的解释。如何使用 LifecycleObserver 接口(interface)制作生命周期感知组件。
我在 fragment 和自定义 View 中注册了 fragment 的生命周期,在获得生命周期时,我使用生命周期来获取生命周期范围。

//Inside custom view
fun registerLifecycleOwner(lifecycle: Lifecycle){
lifecycle.addObserver(this)
scope = lifecycle.coroutineScope
}

//Inside fragment
binding.myCustomView.registerLifecycleOwner(lifecycle)
然后在自定义 View 中,我像这样使用它:
scope.launch{ 
//Do work
}
编辑
如果您不需要让您的自定义 View 生命周期感知,您也可以简单地将范围从 Activity/fragment 传递给您的自定义 View
fun setScope(lifecycleScope: CoroutineScope) {
scope = lifecycleScope
}

关于android - 如何从自定义 View 访问宿主 fragment 的生命周期范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64046621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com