Ошибка при удалении элемента из RecyclerView, Kotlin, Android Studio - PullRequest
1 голос
/ 25 февраля 2020

Я смотрю на свой вид рециркулятора, я хочу иметь возможность удалять элементы.

Когда я проводю, чтобы удалить, я получаю эту ошибку.

java .lang .ArrayIndexOutOfBoundsException: length = 5; index = -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}")
}

1 Ответ

2 голосов
/ 25 февраля 2020

Может быть, я неправильно понимаю ваш код, но я замечаю одну вещь: вы создаете новый адаптер каждый раз, когда проводите. Я не уверен, почему ты это сделал. И я также не знаю, имеет ли это какое-либо отношение к крэу sh, который вы получаете. Но разве это не сработает, если пропустить первые две строки в onSwiped? так что становится

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))
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...