【问题标题】:Coroutines inside Recycler AdapterRecycler Adapter 中的协程
【发布时间】:2021-05-07 08:53:43
【问题描述】:

对于 Room db。我想在 Recycler View 中运行一些协程。

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

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

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

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

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

你们有什么建议?

【问题讨论】:

    标签: android kotlin android-room kotlin-coroutines


    【解决方案1】:

    我建议使用:

    CoroutineScope(Dispatchers.IO).launch {}
    

    【讨论】:

    • 如果你要这样做,那为什么不直接launch(Dispatchers.IO)
    • 因为在RecyclerView
    【解决方案2】:

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

    我会将这些信息移动到项目列表中,然后从视图模型中调用:

    viewModelScope.launch{}

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

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多