日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android-View点击事件短时间重复点击的过滤

發布時間:2024/4/15 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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点击事件短时间重复点击的过滤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。