Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.2k views
in Technique[技术] by (71.8m points)

kotlin - Prevent or avoid Multiple clicks in Android app

How to prevent user from doing multiple clicks on a button??.

Actual problem: if user keep clicking on the button very quickly. Button click execute my api call multiple times.

Applied Solution Not Work: Even if you tried to disable the button directly after onClick(), still there is a probability to have multiple click happened.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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()
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...