Android 在适配器中重置数据时,存储库中的列表将变为空

Android 在适配器中重置数据时,存储库中的列表将变为空,android,kotlin,android-recyclerview,kotlin-coroutines,Android,Kotlin,Android Recyclerview,Kotlin Coroutines,我正在适配器中实现ActionMode.Callback 在onActionItemClicked中,我调用片段内的方法并传递一个列表: override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean { if (item?.itemId == R.id.action_delete) { onItemClickListener.onDeleteItems(selectedItems

我正在适配器中实现
ActionMode.Callback

onActionItemClicked
中,我调用片段内的方法并传递一个列表:

override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
    if (item?.itemId == R.id.action_delete) {
        onItemClickListener.onDeleteItems(selectedItems)
        mode?.finish()
    }
    return true
}
当调用
mode?.finish()
时,此函数也被调用:

   override fun onDestroyActionMode(mode: ActionMode?) {
        selectedItems.clear()
        notifyDataSetChanged()
    }
我正在获取列表,并将其传递到存储库,当我进入CoroutineScope内部时,列表突然变为空。 我认为这是CoroutineScope的问题,但是如果我删除
onDestroyActionMode
方法主体,这一切都很好,我可以删除我的项目

如何修复我的代码,使我可以删除我的项目关闭操作模式并清除数据,而不影响存储库功能中的列表(我不明白为什么会发生影响?我只是在适配器中本地清除数据,它是如何影响存储库功能的?)

存储库中的函数如下所示:

    fun deleteItems(items: List<Items>) {
        Log.d(TAG, "deleteitems: before CoroutineScope $items") //-- All good
        CoroutineScope(Dispatchers.IO).launch {
            Log.d(TAG, "deleteitems: after CoroutineScope$items") //-- Empty list
            itemsDao.deleteitems(items)
        }
    }
fun删除项目(项目:列表){
Log.d(标记“deleteitems:before CoroutineScope$items”)/--所有良好
协同路由示波器(Dispatchers.IO)。启动{
Log.d(标记“deleteitems:after CoroutineScope$items”)/--空列表
itemsDao.deleteitems(项目)
}
}

一旦调用
launch
然后
deleteems
立即返回,您就可以在框架回调挂钩上清除列表中的项目,您可以使用
finish
启动该挂钩,这样在运行范围内的代码时列表可能为空,也可能不为空。另外,如果您在不同的线程之间使用相同的
列表
,那么它至少应该是volatile引用,如果不是线程安全的,尤其是您将迭代集合。