RecyclerView - Удалить строку всегда удаляет последнюю - PullRequest
0 голосов
/ 24 августа 2018

В моей MainActivity у меня есть RecyclerView, для которого я реализовал функцию удаления для удаления:

private val swipeHelper = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) {

    override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
        return false
    }

    override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
        val position = viewHolder.adapterPosition //get position which is swipe

        if (direction == ItemTouchHelper.LEFT) {  //if swipe left
            deleteSwipe(position)
        } else {
            editSwipe(position)
        }
    }
    ...
}

и вот так выглядит функция deleteSwipe ():

private fun deleteSwipe(position: Int) {
        try {
            adapter.removeItem(position)
            ...
        } catch (e: IndexOutOfBoundsException) {}
    }

А вот моя removeItem(pos:Int) функция в адаптере:

fun removeItem(position: Int) {
    activeFiltered!!.removeAt(position)
    notifyDataSetChanged()
}

обратите внимание, что я специально использовал notifyDataSetChanged() вместо notifyItemRemoved(), потому что мне не нужна анимация.

Проблема в том, что независимо от того, какой элемент в списке я пролистываю, тот, который удаляется, всегда является последним. Я отладил переменную позиции, и я ожидаю ее, так что не знаю, где именно ошибка.

1 Ответ

0 голосов
/ 24 августа 2018

Я не уверен, почему notifyDataSetChanged() удаляет неправильный объект, но если вам не нужны анимации, вы можете отключить анимацию в Recyclerview, используя метод setItemAnimator(ItemAnimator) и передав null , Вместо использования notifyDataSetChanged() для уведомления RecyclerView об изменениях (также это неэффективно) следует вызвать метод notifyItemRemoved(int) и перейти в позицию, которую вы хотите удалить. Это отключит анимацию и только уведомит RecyclerView о том, какой именно элемент был удален (очень эффективно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...