Android 防重复点击(Kotlin 协程实现 和 Handler实现)
Posted 匆忙拥挤repeat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 防重复点击(Kotlin 协程实现 和 Handler实现)相关的知识,希望对你有一定的参考价值。
文章目录
考虑了,直接绑定 View#setOnClickListener 实现函数;或传入View.OnClickListener 实例。
Kotlin 协程实现
调用
mBind.btnJaClickA.debounceClick(lifecycleScope)
mBind.btnJaClickB.debounceClick(this)
mBind.btnJaClickC.debounceClick(lifecycleScope, originBlock = )
mBind.btnJaClickD.debounceClick(this, originBlock = )
本实现,会后触发真实事件,连续点击时,看到的日志是这样的:
start
start
start
...
end
Handler + Runnable 实现
除了构建一个全局的 handler 对象; 或可以直接使用 View内的handler实例。
eg.this.handler.postDelayed()
调用
mBind.btnJaClickD.debounceClickWidthHandler
mBind.btnJaClickE.debounceClickWidthHandler(originBlock = )
本实现,会后触发真实事件,连续点击时,看到的日志是这样的:
start
start remove
start remove
...
end
基于系统时间 实现
调用
mBind.btnJaClickG.clickWithTrigger
mBind.btnJaClickH.clickWithTrigger(originBlock = )
本实现,会先触发真实事件,连续点击时,看到的日志是这样的:
start
end
start
start
...
setTag/getTag 可能引发异常
使用uuid-string,并获取 其hashCode,作为tag的key值;或者使用一个固定的int值作为key值;可能会报异常:IllegalArgumentException: The key must be an application-specific resource id;
看这个异常说明,就是需要定义特定的 资源id ,来用作 setTag/getTag的key。
ids.xml :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="job_id"/>
<item type="id" name="runnable_id"/>
<item type="id" name="trigger_last_time_id"/>
</resources>
应用:
setTag(R.id.job_id, obj)
getTag(R.id.job_id, obj)
以上是关于Android 防重复点击(Kotlin 协程实现 和 Handler实现)的主要内容,如果未能解决你的问题,请参考以下文章
Android 防重复点击(Kotlin 协程实现 和 Handler实现)
Android - ViewModel、LiveData、Room 和 Retrofit 以及协程放在 kotlin 中