1. 程式人生 > >Android 防止多次重複點選的三種方法

Android 防止多次重複點選的三種方法

在專案中經常會遇到對按鈕、自定義控制元件的 Item 等防止多次重複的點選的問題,下面做一個小結。

方法1:使用 RxJava 的 throttleFirst()

具體程式碼如下:

   /**
     * 防止重複點選
     *
     * @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;
    }