Recycler Adapter 内的协程

amt*_*rax 5 android kotlin android-room kotlin-coroutines

出于 Room db 的目的。我想在回收器视图中运行一些协程。

必要的挂起函数作为类参数处理:

class RecyclerAdapter  (private val  exist : suspend (lastName : String) -> Boolean) 
Run Code Online (Sandbox Code Playgroud)

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

GlobalScope.launch(Dispatchers.IO) {
   if (exist(dataSet[position].lastName))
       [...]
Run Code Online (Sandbox Code Playgroud)

我不确定使用全局范围是否是最佳实践。我考虑过使用lifecycleScope,但在 Adapter 中lifecycleOwner不可用,将其作为参数处理不是一个好的做法。

你们有什么建议?

Nag*_*obi 9

我认为这违背了单一责任模式,因为适配器的目的主要是照顾数据的布局方式。

我会将此信息移动到项目列表中,并从视图模型中进行调用,方法如下:

viewModelScope.launch{}

不是更新LiveData/ StateFlow,从视图中观察它,并将列表相应地提交给适配器


And*_*nok 4

我建议使用:

CoroutineScope(Dispatchers.IO).launch {}
Run Code Online (Sandbox Code Playgroud)