From 2c2ac7e2736c92a5833541187c105aafbeaf890f Mon Sep 17 00:00:00 2001 From: limuyang Date: Tue, 21 Nov 2023 11:35:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20removeAtRange()=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E7=94=A8=E4=BA=8E=E4=BE=BF=E6=8D=B7?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8C=87=E5=AE=9A=E8=8C=83=E5=9B=B4=E5=86=85?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/adapter/base/BaseDifferAdapter.kt | 21 +++++++++++++ .../library/adapter/base/BaseQuickAdapter.kt | 31 +++++++++++++++++++ .../adapter/base/BaseSingleItemAdapter.kt | 4 +++ 3 files changed, 56 insertions(+) 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()") }