Я пытаюсь удалить элементы из адаптера при нажатии элемента. Дисплей работает правильно, но когда я щелкаю последний элемент, я получаю исключение IndexOutOfBound
моя разность использует ниже
class ItemListDiffUtilCallBack(val oldList: List<Item?>,
val newList: List<Item?>) : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean
= oldList[oldItemPosition]?.Id == newList[newItemPosition]?.Id
override fun getOldListSize() = oldList.size
override fun getNewListSize() = newList.size
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean
= oldList[oldItemPosition]?.isEnrolled == newList[newItemPosition]?.isEnrolled
override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
return super.getChangePayload(oldItemPosition, newItemPosition)
}
}
так я обновляю список, в котором newList удаляет из него Предмет.
На дисплее удаляется Предмет со значением по умолчанию, как и предполагалось
private fun updateList(newList: MutableList<Item?>) {
val oldList = itemList.toMutableList()
itemList.clear()
itemList.addAll(newList)
val result = DiffUtil.calculateDiff(ItemListDiffUtilCallBack(oldList, itemList))
result.dispatchUpdatesTo(this@ItemRecyclerViewAdapter)
}
когда onBindViewHolder получить триггер после dispatchUpdatesTo
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is ItemViewHolder) {
val Item = itemList[position]
holder.setItem(Item)
val myButtonListener = View.OnClickListener {
itemList[position]?.Id?.let { Id ->
listener.onItemClick(Id)
}
}
holder.setButtonClickListener(myButtonListener )
}
}
val Item = itemList [position] itemList по-прежнему имеют размер до обновления.
И когда я щелкаю последний элемент, чтобы удалить его,
itemList [position] ?. Id? .Let { itemList [position] позиция возвращает последний элемент старого списка, поэтому я получаю исключение IndexOutOfBound
Что я сделал не так?