android - 扩展函数上的协程

标签 android kotlin kotlin-coroutines android-paging kotlin-extension

我正在使用扩展函数将列表数据绑定(bind)到 recyclerview ,使用 pagedlist 它不需要任何协程

@BindingAdapter("pagedListAdapterData")
fun <T : Any> submitPagedList(recyclerView: RecyclerView, list: PagedList<T>?) {
    if (list != null && recyclerView.adapter is PagedListAdapter<*, *>) {
        (recyclerView.adapter as? PagedListAdapter<T, RecyclerView.ViewHolder>)?.submitList((list))
    }
}

        pagedListAdapterData="@{viewModel.list}"

但是当我升级到 Paging 3.0 时,它需要使用协程

@BindingAdapter("pagingDataAdapter")
fun <T : Any> submitPagingDataList(recyclerView: RecyclerView, list: PagingData<T>?) {
    if (list != null && recyclerView.adapter is PagingDataAdapter<*, *>) {
        GlobalScope.launch {
            (recyclerView.adapter as? PagingDataAdapter<T, RecyclerView.ViewHolder>)?.submitData((list))
        }
    }
}

这工作得很好,但我担心的是 Globalscope 的使用,似乎有更好的方法来做到这一点,因为不推荐使用 globalScope

最佳答案

androidx.lifecycle 有一个扩展函数 View.findViewTreeLifecycleOwner,所以你不必创建自己的:

view.findViewTreeLifecycleOwner()?.lifecycleScope?.launch {
  ...
}

关于android - 扩展函数上的协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64570565/

相关文章:

java - 在android中动态添加1小时

android - 从相机获取全尺寸图像不适用于 Galaxy S

android - 存储库类中的协程范围

android - Task<T>.await() 主线程安全吗?

android - Webview 中的进度对话框

android - 无法解析符号 'decodeResource'

sql - 如何使用 jOOQ 使用命名参数而不是问号

java - 如何将 SSL 证书添加到 okHttp 双向 TLS 连接?

intellij-idea - IntelliJ 删除后无法识别 kotlin 文件并使用相同名称重新创建

kotlin - 将 suspendCancellableCoroutine 转换为callbackFlow