在项目中经常会遇到对按钮、自定义控件的 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 onSubscribe(Disposable d) {                    }                    @Override                    public void onNext(Object o) {                        listener.onClick(target);                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onComplete() {                    }                });    }   

上述代码中,利用throttleFirst方法,取 1 秒内的第一次点击进行响应。

不过该方法在 RecycleView 的 item 的防重复点击时有可能失效,此时可采用下面的方法 2。

方法2:利用系统时间差

    //全局定义    private long lastClickTime = 0L;    // 两次点击间隔不能少于1000ms    private static final int FAST_CLICK_DELAY_TIME = 1000;     //在设置Item的监听时    item.setOnItemClickListener(xxx){       if (System.currentTimeMillis() - lastClickTime >= FAST_CLICK_DELAY_TIME) {            //下面进行其他操作,比如跳转等            XXX            lastClickTime = System.currentTimeMillis();        }      } 

方法3:工具类,用于判断是否快速点击

该方法与方法 2 的原理类似:

    // 两次点击间隔不能少于1000ms    private static final int FAST_CLICK_DELAY_TIME = 1000;     private static long lastClickTime;    public static boolean isFastClick() {        boolean flag = true;        long currentClickTime = System.currentTimeMillis();        if ((currentClickTime - lastClickTime) >= FAST_CLICK_DELAY_TIME ) {            flag = false;        }        lastClickTime = currentClickTime;        return flag;    }

更多相关文章

  1. Android(安卓)Json解析方法
  2. bitmap设置图片尺寸缩小,避免内存溢出/OutOfMemoryError的优化方
  3. android Retrofit简单使用及源码分析
  4. Android反射机制实现与原理
  5. android ListView显示网络图片
  6. Android(安卓)Handler 用法解析
  7. Android面试常客之Handler全解
  8. Android(安卓)ProGuard技术详解
  9. 实现TabWidget选项卡按钮在屏幕下方

随机推荐

  1. Unable to resolve target 'android-14'
  2. Android Activity(窗口)的一生
  3. MTK Android 之MT6577驱动笔记
  4. Jeally Bean中MonekyRunner 帮助文件
  5. 整理
  6. 第三章 Android控件架构与事件拦截机制
  7. Android 滑动效果进阶篇(五)—— 3D旋转
  8. android studio 不能导包问题解决方案
  9. Android View绘制的流程
  10. 百度地图使用