Android防止快速重复点击
16lz
2021-12-04
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 } };
更多相关文章
- Android实现图片缩放与旋转
- 那些年收藏的技术文章(一)-CSDN篇
- android EditText 实现搜索框点击搜索隐藏键盘
- Android(安卓)Service总结06 之AIDL
- 在android中实现动态跑动的图表实现方法
- android 监听去电实现ip拨号 广播接收者
- TextView实现电话、网址链接
- 自定义TabActivity,TabActivity的美化
- Android使用Shape实现布局圆角边框