Solving Android multiple clicks problem — Kotlin
I searched the community and found amazing solution like creating a custom click listener that will preserve the last click time and prevent clicking for a specific period
But — as a big fan of Kotlin — I was thinking to have something to use very smoothly using the power of lambdas and closures.
So I came up with this implementation, hope to help you
Step 1 : Create class with name SafeClickListener.kt
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)
}
}
Step 2 : Add extension function to make it works with any view, this will create a new SafeClickListener and delegate the work to it.
fun View.setSafeOnClickListener(onSafeClick: (View) -> Unit) {
val safeClickListener = SafeClickListener {
onSafeClick(it)
}
setOnClickListener(safeClickListener)
}
Step 3 : Now it is very easy to use it. Just replace button1.setonclicklistner with setSafeOnClickListener.
settingsButton.setSafeOnClickListener {
showSettingsScreen()
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…