From 347e3cc9db9576afda656339a76b36e7e6c4c766 Mon Sep 17 00:00:00 2001 From: drake Date: Sat, 16 Dec 2023 20:06:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20#412=20=E6=94=AF=E6=8C=81=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E7=82=B9=E5=87=BB=E9=98=B2=E6=8A=96=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- README_EN.md | 2 +- .../main/java/com/drake/brv/BindingAdapter.kt | 4 ++-- ...Listener.kt => OnDebounceClickListener.kt} | 20 ++++++++++++------- brv/src/main/java/com/drake/brv/utils/BRV.kt | 16 +++++++++++++++ docs/click.md | 16 ++++++++++++--- docs/updates.md | 5 ++++- 7 files changed, 50 insertions(+), 15 deletions(-) rename brv/src/main/java/com/drake/brv/listener/{ThrottleClickListener.kt => OnDebounceClickListener.kt} (64%) diff --git a/README.md b/README.md index be7b444fa..8a1b7d0d4 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ Module 的 build.gradle 添加依赖框架 ```groovy dependencies { - implementation 'com.github.liangjingkanji:BRV:1.5.7' + implementation 'com.github.liangjingkanji:BRV:1.5.8' } ``` diff --git a/README_EN.md b/README_EN.md index b4c02b57a..b54403a39 100644 --- a/README_EN.md +++ b/README_EN.md @@ -88,7 +88,7 @@ Then, add the framework dependency to the module's build.gradle file: ```groovy dependencies { - implementation 'com.github.liangjingkanji:BRV:1.5.6' + implementation 'com.github.liangjingkanji:BRV:1.5.8' } ``` diff --git a/brv/src/main/java/com/drake/brv/BindingAdapter.kt b/brv/src/main/java/com/drake/brv/BindingAdapter.kt index b4e13d975..c966f73b4 100755 --- a/brv/src/main/java/com/drake/brv/BindingAdapter.kt +++ b/brv/src/main/java/com/drake/brv/BindingAdapter.kt @@ -287,7 +287,7 @@ open class BindingAdapter : RecyclerView.Adapter Unit) { - setOnClickListener(ThrottleClickListener(period, block)) +internal fun View.setOnDebounceClickListener(interval: Long = 500, block: View.() -> Unit) { + setOnClickListener(OnDebounceClickListener(interval, block)) } -private class ThrottleClickListener(private val period: Long = 500, private var block: View.() -> Unit) : - View.OnClickListener { +private class OnDebounceClickListener( + private val interval: Long = 500, + private var block: View.() -> Unit +) : View.OnClickListener { - private var lastTime: Long = 0 + private var _lastDebounceClickTime: Long = 0 + private var lastDebounceClickTime: Long + get() = if (BRV.debounceGlobalEnabled) BRV.lastDebounceClickTime else _lastDebounceClickTime + set(value) = if (BRV.debounceGlobalEnabled) BRV.lastDebounceClickTime = value else _lastDebounceClickTime = value override fun onClick(v: View) { val currentTime = System.currentTimeMillis() - if (currentTime - lastTime > period) { - lastTime = currentTime + if (currentTime - lastDebounceClickTime > interval) { + lastDebounceClickTime = currentTime block(v) } } diff --git a/brv/src/main/java/com/drake/brv/utils/BRV.kt b/brv/src/main/java/com/drake/brv/utils/BRV.kt index 808262b83..a1322200c 100644 --- a/brv/src/main/java/com/drake/brv/utils/BRV.kt +++ b/brv/src/main/java/com/drake/brv/utils/BRV.kt @@ -43,5 +43,21 @@ object BRV { * 防抖动点击事件默认的间隔时间, 单位毫秒 * @see com.drake.brv.BindingAdapter.onClick */ + var debounceClickInterval: Long = 500 + + @Deprecated("命名规范", ReplaceWith("BRV.debounceClickInterval"), DeprecationLevel.ERROR) var clickThrottle: Long = 500 + + /** + * 启用item所有view点击事件共享防抖动间隔, BRV默认防抖动仅针对单个view + * @see com.drake.brv.BindingAdapter.onClick + */ + var debounceGlobalEnabled: Boolean = false + + /** + * 此变量用于支持全局控件防抖动 + * @see com.drake.brv.BindingAdapter.onClick + * @see debounceGlobalEnabled 要求先启用全局共享防抖动 + */ + var lastDebounceClickTime: Long = 0 } \ No newline at end of file diff --git a/docs/click.md b/docs/click.md index b8b923eb2..dd8116230 100644 --- a/docs/click.md +++ b/docs/click.md @@ -57,17 +57,27 @@ BRV使用`onClick`函数设置监听事件即包含防抖动, 以下为修改防 === "全局" ```kotlin - BRV.clickThrottle = 1000 // 单位毫秒 + BRV.debounceClickInterval = 1000 // 单位毫秒 ``` === "单例" ```kotlin hl_lines="2" binding.rv.linear().setup { - clickThrottle = 1000 // 覆盖全局设置 + debounceClickInterval = 1000 // 覆盖全局设置 addType(R.layout.item_simple) R.id.item.onClick { toast("点击文本") } }.models = getData() - ``` \ No newline at end of file + ``` +=== "共享防抖动" + ```kotlin + // 启用item所有view点击事件共享防抖动间隔, BRV默认防抖动仅针对单个view + BRV.debounceGlobalEnabled = true + ``` + +!!! question "全局防抖动" + 使用`BRV.lastDebounceClickTime`来判断抖动间隔时间, 即可统一BRV和你实现的防抖动点击事件监听 + + - [防抖动示例](https://github.com/liangjingkanji/BRV/blob/master/brv/src/main/java/com/drake/brv/listener/OnDebounceClickListener.kt) \ No newline at end of file diff --git a/docs/updates.md b/docs/updates.md index 94503a365..591f8135c 100644 --- a/docs/updates.md +++ b/docs/updates.md @@ -1,5 +1,8 @@ +## 1.5.8 +- feat: #412 支持全局点击防抖动 + ## 1.5.7 -fix: #409 修复单一展开模式下删除数据后展开导致崩溃 +- fix: #409 修复单一展开模式下删除数据后展开导致崩溃 ## 1.5.6 - fix: #402 修复Staggered布局+分割线添加数据崩溃