diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseDifferAdapter.kt b/library/src/main/java/com/chad/library/adapter/base/BaseDifferAdapter.kt index dd712e2f..6c1c3862 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseDifferAdapter.kt +++ b/library/src/main/java/com/chad/library/adapter/base/BaseDifferAdapter.kt @@ -152,6 +152,27 @@ abstract class BaseDifferAdapter( } } + override fun removeAtRange(range: kotlin.ranges.IntRange) { + if (range.isEmpty()) { + return + } + if (range.first >= items.size) { + throw IndexOutOfBoundsException("Range first position: ${range.first} - last position: ${range.last}. size:${items.size}") + } + + val last = if (range.last >= items.size) { + items.size - 1 + } else { + range.last + } + + val list = items.toMutableList() + for (it in last downTo range.first) { + list.removeAt(it) + } + submitList(list) + } + override fun swap(fromPosition: Int, toPosition: Int) { if (fromPosition in items.indices || toPosition in items.indices) { items.toMutableList().also { diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt index 581a852a..1ce41b06 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.kt @@ -651,6 +651,37 @@ abstract class BaseQuickAdapter( removeAt(index) } + /** + * 删除给定范围内的数据 + * + * @param range Int 索引范围 + */ + open fun removeAtRange(range: kotlin.ranges.IntRange) { + if (range.isEmpty()) { + return + } + if (range.first >= items.size) { + throw IndexOutOfBoundsException("Range first position: ${range.first} - last position: ${range.last}. size:${items.size}") + } + + val last = if (range.last >= items.size) { + items.size - 1 + } else { + range.last + } + + for (it in last downTo range.first) { + mutableItems.removeAt(it) + } + + notifyItemRangeRemoved(range.first, last - range.first + 1) + + // 处理空视图的情况 + if (displayEmptyView()) { + notifyItemInserted(0) + } + } + /** * Item swap * 数据位置交换。这里单纯的只是两个数据交换位置。(注意⚠️,这里移动后的数据顺序与 [move] 不同) diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseSingleItemAdapter.kt b/library/src/main/java/com/chad/library/adapter/base/BaseSingleItemAdapter.kt index 03f1d12d..af044471 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseSingleItemAdapter.kt +++ b/library/src/main/java/com/chad/library/adapter/base/BaseSingleItemAdapter.kt @@ -76,6 +76,10 @@ abstract class BaseSingleItemAdapter(priv throw RuntimeException("Please use setItem()") } + override fun removeAtRange(range: IntRange) { + throw RuntimeException("Please use setItem()") + } + override fun removeAt(position: Int) { throw RuntimeException("Please use setItem()") }