kotlin 再循环器适配器内部的协同程序

deikduxw  于 2023-01-26  发布在  Kotlin
关注(0)|答案(3)|浏览(137)

为了房间数据库的目的,我想在回收视图中运行一些协同程序。
必要的挂起功能作为类参数处理:

class RecyclerAdapter  (private val  exist : suspend (lastName : String) -> Boolean)

然后,当需要时,我使用以下结构:

GlobalScope.launch(Dispatchers.IO) {
   if (exist(dataSet[position].lastName))
       [...]

我不确定使用全局作用域是否是最佳实践。我考虑过使用lifecycleScope,但在适配器中lifecycleOwner不可用,将其作为参数处理不是一个好的实践。
你们有什么建议?

af7jpaap

af7jpaap1#

我认为这与单一责任模式相违背,因为适配器的目的主要是处理数据的布局。
我将把这些信息移到项目列表中,然后从视图模型中调用,使用:
viewModelScope.launch{}
然后更新LiveData/StateFlow,从视图中观察它,并相应地将列表提交给适配器

7ivaypg9

7ivaypg92#

我建议用途:

CoroutineScope(Dispatchers.IO).launch {}
juud5qan

juud5qan3#

你可以在onBindViewHolder中得到LifecycleCoroutineScope

override fun onBindViewHolder(holder: EventViewHolder, position: Int) {
    val coroutineScope =
        holder.itemView.findViewTreeLifecycleOwner()?.lifecycleScope ?: CoroutineScope(Dispatchers.IO)
}

但正如Róbert Nagy所说,我不认为在RecyclerView中直接处理业务逻辑是一个好主意。

相关问题