在項目中經常會遇到對按鈕、自定義控件的 Item 等防止多次重復的點擊的問題,下面做一個小結。
方法1:使用 RxJava 的 throttleFirst()
具體代碼如下:
/** * android/214410.html">android/221573.html">防止重復點擊 * * @param target 目標view * @param listener 監聽器 */ public static void preventRepeatedClick(final View target, final View.OnClickListener listener) { RxView.clicks(target).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Observer<Object>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object object) { listener.onClick(target); } }); }上述代碼中,利用throttleFirst方法,取1秒內的第一次點擊進行響應。
方法2:利用系統時間差
//全局定義 private long lastClickTime = 0L; private static final int FAST_CLICK_DELAY_TIME = 500; // 快速點擊間隔 //在設置Item的監聽時 item.setOnItemClickListener(xxx){ if (System.currentTimeMillis() - lastClickTime < FAST_CLICK_DELAY_TIME){ return; } lastClickTime = System.currentTimeMillis(); //下面進行其他操作,比如跳轉等 XXX }該方法主要針對于自定義控件的點擊。
方法3:工具類,用于判斷是否快速點擊
該方法與方法2 的原理類似:
private static final int MIN_DELAY_TIME= 1000; // 兩次點擊間隔不能少于1000ms private static long lastClickTime; public static boolean isFastClick() { boolean flag = true; long currentClickTime = System.currentTimeMillis(); if ((currentClickTime - lastClickTime) >= MIN_DELAY_TIME) { flag = false; } lastClickTime = currentClickTime; return flag; }以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答