Android-View点击事件短时间重复点击的过滤
生活随笔
收集整理的這篇文章主要介紹了
Android-View点击事件短时间重复点击的过滤
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、實現方式
1、Rxjava
2、自定義類繼承OnClickListener接口
二、實現過程
1、Rxjava
這種方式需要項目以來rxjava庫,推薦在項目中存在該庫時使用
如果不想依賴,可以參考第二種方式。 用到的方法:Observable的throttleFirst方法實現短時間內的事件過濾。 復制代碼 import android.view.View import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import java.util.concurrent.TimeUnit/*** View控件短時間內二次點擊的幫助類*/ class DebounceHelper {companion object{/*** 對View的點擊事件在設定的時間內進行防止二次點擊,不帶View參數的回調* @param view* @param debounceTime 設定的這個時間內,View點擊只有一次起效,時間單位是秒* @param runnable View的點擊后的執行方法的回調*/fun click(view: View,debounceTime:Long,runnable: Runnable){Observable.create<View> {var emitter = itview?.setOnClickListener {Log.e("DebounceHelper","點擊...")emitter.onNext(it)}}.throttleFirst(debounceTime,TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe { runnable.run() }}/*** 對View的點擊事件在設定的時間內進行防止二次點擊,帶View參數的回調* @param view* @param debounceTime 設定的這個時間內,View點擊只有一次起效,時間單位是秒* @param listener View的點擊事件回調,帶有本身View的參數*/fun click(view: View,debounceTime:Long,listener:View.OnClickListener){Observable.create<View> {var emitter = itview?.setOnClickListener {emitter.onNext(it)}}.throttleFirst(debounceTime,TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe { listener.onClick(it) }}} } 復制代碼調用:
DebounceHelper.click(mView,1, Runnable {//執行方法timeCount++LoggerUtil.e("clickTextView:$timeCount")Toast.makeText(this.context,"clickTextView:$timeCount",Toast.LENGTH_SHORT).show()}) 復制代碼當logcat顯示:點擊... ,表示點擊了按鈕,
顯示:clickTextView的時候,表示執行了點擊事件。
可以根據logcat顯示情況,當View重復點擊的時候,在1秒內都是不會去執行點擊事件的,雖然已經發生了點擊。
下面的第二種方式也是相同的操作。
2、自定義類繼承OnClickListener接口
這種方式無需依賴第三方庫,推薦在項目中沒有rxjava庫時使用
import android.view.View/*** View點擊事件短時間內連續點擊的過濾類,避免在重復操作* @param debounceTime 兩次點擊的最短間隔時間,在此時間內的點擊只執行一次,單位是毫秒,如限制1秒,傳入:1000* @param runnable 點擊事件的方法都在該Runnable類中執行。如需返回view作為參數,可將該類替換成 View.OnClickListener */ class DebounceClickListener(var debounceTime: Long, var runnable: Runnable) : View.OnClickListener {var mLastClickTime: Long = System.currentTimeMillis()override fun onClick(view: View?) {if (view == null) returnif (mLastClickTime > 0) {val currentTimeMillis = System.currentTimeMillis()val debounceBetweenTime = currentTimeMillis - mLastClickTime//時間大于指定的時間,執行runnable的回調if (debounceBetweenTime > debounceTime) {mLastClickTime = System.currentTimeMillis()runnable.run()} else {LoggerUtil.e("時間間隔:$debounceBetweenTime")return}} else {mLastClickTime = System.currentTimeMillis()runnable.run()}}} 復制代碼調用:
mView.apply {setOnClickListener(DebounceClickListener(1000, Runnable {//執行方法timeCount++LoggerUtil.e("clickTextView:$timeCount")Toast.makeText(this.context,"clickTextView:$timeCount",Toast.LENGTH_SHORT).show()})) } 復制代碼總結
以上是生活随笔為你收集整理的Android-View点击事件短时间重复点击的过滤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gitlab的CI/CD初尝试
- 下一篇: 记录一下在mac上做一个usb linu