class SafeClickListener(
private var defaultInterval: Int = 1000,
private val onSafeCLick: (View) -> Unit
) : View.OnClickListener {
private var lastTimeClicked: Long = 0
override fun onClick(v: View) {
if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultInterval) {
return
}
lastTimeClicked = SystemClock.elapsedRealtime()
onSafeCLick(v)
}
}
//its work same as setOnClickListener
//Create Function Like this in Utils File
fun View.setOnclick(listenerBlock: OnDebounceClickListener) =
setOnClickListener(MulticlickPrevent(1000L, listenerBlock))
interface OnDebounceClickListener {
fun onClick(view: View?)
}
class MulticlickPrevent(
private val interval: Long,
private val listenerBlock: OnDebounceClickListener
) : View.OnClickListener {
private var LastClickListner = 0L
override fun onClick(v: View) {
val time = System.currentTimeMillis()
if (time - LastClickListner >= interval) {
LastClickListner = time
listenerBlock.onClick(v)
}
}
}
//在像这样的活动上使用
myview.setOnclick(object : OnDebClickListener{
override fun onClick(var1: View?) {
TODO("Do your code")
}
})
//Or
class MainActivity : Activity() , OnDebClickListener{
//in onCreate method
myview.setOnclick(this)
}
3条答案
按热度按时间0tdrvxhp1#
解决Android的多次点击问题-Kotlin
我搜索了社区,发现了一个很棒的解决方案,比如创建一个自定义的点击监听器,它可以保存最后一次点击的时间,并在特定的时间段内阻止点击。但是--作为Kotlin的忠实粉丝--我想使用lambda和闭包的强大功能来实现一些非常流畅的功能。所以我想出了这个实现,希望能对你有所帮助
步骤1:创建名为SafeClickListener.kt的类
步骤2:添加扩展函数以使其与任何视图一起工作,这将创建一个新的SafeClickListener并将工作委托给它。
第三步:现在它非常容易使用。只需将button1.setonclicklistner替换为setSafeOnClickListener即可。
xxls0lw82#
您可以使用下面的代码来完成该任务:
您可以在单击按钮时调用此函数。
az31mfrm3#
//在像这样的活动上使用