Android防重点击,网上有很多实现方式:RxJava 的 throttleFirst()、Aspect AOP、记录点击时间。
总结了如下一种方式:本质是记录点击时间。

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;import java.lang.reflect.Method;import android.view.View.OnClickListener;public class OnClick {       public static final long LIMIT_DURATION = 1500L;//时间间隔:1500ms  public OnClick() {       }  public static OnClickListener setOnClickListener(final OnClickListener raw) {         return (OnClickListener)Proxy.newProxyInstance(OnClickListener.class.getClassLoader(), new Class[]{     OnClickListener.class}, new InvocationHandler() {           long lastTime;      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {             if (!"onClick".equals(method.getName())) {               return method.invoke(raw, args);        } else {               long now = System.currentTimeMillis();          if (now - this.lastTime >= OnClick.LIMIT_DURATION) {                 this.lastTime = now;            return method.invoke(raw, args);          } else {                 return null;          }        }      }    });  }}

使用示例:1500ms内只可点击一次
1.

button.setOnClickListener(OnClick.setOnClickListener(this));
button.setOnClickListener(OnClick.create(new View.OnClickListener() {           @Override public void onClick(View view) {                   }    }));

3.结合DataBinding

布局文件:

<layout><data>    <import type="com.test.util.OnClick" />    <variable        name="mainModel"        type="com.test.MainViewModel"        />  </data><Button        android:id="@+id/btn_test"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="test"        android:onClick="@{OnClick.create(mainModel.onClickListener)}"        /></layout> 

com.test.MainModel.java中点击事件实现:

public View.OnClickListener onClickListener= new View.OnClickListener() {         @Override    public void onClick(View v) {           // TODO click event    }  };

更多相关文章

  1. Android实现图片缩放与旋转
  2. 那些年收藏的技术文章(一)-CSDN篇
  3. android EditText 实现搜索框点击搜索隐藏键盘
  4. Android(安卓)Service总结06 之AIDL
  5. 在android中实现动态跑动的图表实现方法
  6. android 监听去电实现ip拨号 广播接收者
  7. TextView实现电话、网址链接
  8. 自定义TabActivity,TabActivity的美化
  9. Android使用Shape实现布局圆角边框

随机推荐

  1. 如何管理不同环境之间的发布版本?
  2. uni-app实战视频点播app小程序
  3. 如何修改 Pages 文稿中的段落样式?
  4. 使用腾讯云提供的针对Nuget包管理器的缓
  5. 使用Redis创建分布式锁
  6. MySQL使用mysqldump+binlog完整恢复被删
  7. 架构设计:数据服务系统0到1落地实现方案
  8. 通过 nginx-proxy 实现自动反向代理和 HT
  9. 使用mysqlbinlog查看二进制日志
  10. 2021年便宜购买阿里云服务器攻略(阿里云小