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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章