Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从RecyclerView、Kotlin、Android Studio删除项目时出错_Android_Kotlin_Android Recyclerview - Fatal编程技术网

从RecyclerView、Kotlin、Android Studio删除项目时出错

从RecyclerView、Kotlin、Android Studio删除项目时出错,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我正在查看我的回收器视图,我希望能够删除项目 当我滑动以删除时,会出现此错误 java.lang.ArrayIndexOutOfBoundsException:长度=5;索引=-1 我想当我刷卡的时候它没有得到正确的位置 如何解决这个问题 以下是我在活动中使用的代码 private fun initRecyclerView() { messages_recycler_view.apply { layoutManager = LinearLayoutManager(this

我正在查看我的回收器视图,我希望能够删除项目

当我滑动以删除时,会出现此错误

java.lang.ArrayIndexOutOfBoundsException:长度=5;索引=-1

我想当我刷卡的时候它没有得到正确的位置

如何解决这个问题

以下是我在活动中使用的代码

private fun initRecyclerView() {
    messages_recycler_view.apply {
        layoutManager = LinearLayoutManager(this@MessagesListVC)
        val topSpacePaddingDecoration = TopSpacingItemDecoration(30)
        addItemDecoration(topSpacePaddingDecoration)
        messagesAdapter = MessagesRecyclerAdaptor()
        adapter = messagesAdapter


        val swipeHandler = object : SwipeToDeleteCallback(this@MessagesListVC) {

            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
                messagesAdapter = MessagesRecyclerAdaptor()
                adapter = messagesAdapter
                (adapter as MessagesRecyclerAdaptor).removeAt(viewHolder.adapterPosition)
            }
        }
        val itemTouchHelper = ItemTouchHelper(swipeHandler)
        itemTouchHelper.attachToRecyclerView(messages_recycler_view)
    }
}
这是回收器适配器中的移除功能

fun removeAt(position: Int) {
    println("Tony the items count is {${messagesInfo.size}")
    messagesInfo.removeAt(position)
    notifyItemRemoved(position)
    println("Tony the new data is $messagesInfo")
    println("Tony the items count is {${messagesInfo.size}")
}

也许我误解了您的代码,但我注意到的一点是,您每次刷卡时都会创建一个新的适配器。我不知道你为什么要那样做。我也不知道这是否与你遭遇的车祸有关。但是,如果在
中省略前两行,它可能会起作用吗?这就变成了

override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
                val position = viewHolder.adapterPosition
                println("Tony the int position is $position")

                if (position > 0) {
                    (messagesAdapter.removeAt(position))
                }
            }

我在发布后看到了这个错误,我删除了这些行,仍然得到了相同的错误,我还创建了一个Int值,并将其分配给viewHolder.adapter position,然后添加了一个打印,它返回-1,就好像它在刷卡时没有得到单元格的位置。它是否可能一次又一次地短扫多个单元格?我了解到,当它仍在处理另一个notifyItemRemoved时,它可以返回-1。也许只是说在-1的时候什么都不做就可以解决这个问题。例如,OK,这似乎对我很有效,我添加了一个检查,如果位置大于0,那么执行该功能,我将在此处编辑您的答案以显示它并接受它作为答案。感谢您花时间回答。请不要编辑问题以包含答案,因为这将意味着未来的读者将看不到已解决的实际问题。@RobCo我没有将问题编辑为答案我根据给出答案的同一人在答案中的评论编辑了答案,问题仍然存在,因为它是没有2行,力真的有任何关系的问题,因为我注意到这是一个错误后不久张贴。答案是在运行方法之前添加一个检查,它显示在答案中,而不是问题中