we have a kotlin base debounce implementation.
private class DeBouncingOnClickListener(private val onClickListener: ((View) -> Unit)? = null, val viewOnClickListener: View.OnClickListener? = null) : View.OnClickListener {
override fun onClick(v: View) {
if (enabled) {
enabled = false
v.postDelayed(ENABLE_AGAIN, DEBOUNCE_DELAY_IN_MILLIS)
onClickListener?.invoke(v)
viewOnClickListener?.onClick(v)
}
}
companion object {
var enabled: Boolean = true
val ENABLE_AGAIN = { enabled = true }
const val DEBOUNCE_DELAY_IN_MILLIS = 250L
}
}
fun View.setDebounceClickListener(onClickListener: ((View) -> Unit)?) {
if (onClickListener != null) {
val deBouncingOnClickListener = DeBouncingOnClickListener(onClickListener = onClickListener)
setOnClickListener(deBouncingOnClickListener)
} else {
setOnClickListener(null)
}
}