在项目中经常会遇到对按钮、自定义控件的 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() {

@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;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持找一找教程网。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐