单击项目时,我试图从适配器中删除项目显示正在做正确的事情,但是当我单击最后一个项目时,出现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 异常
我做错了什么 ?