前言
为了防止“按钮”的点击事件在短时间内多次点击从而触发了多次处理操作;
比如:快速点击“登录按钮”发送了多次登录接口,导致程序在短时间内进行多次数据提交or数据处理,这样的体验就不太好了。
方法
public class ClickHelper {
private static final android.os.Handler mHandler = new android.os.Handler(android.os.Looper.getMainLooper());
public static void isFastDoubleClick(@NonNull final View view, @NonNull final View.OnClickListener listener) {
view.setOnClickListener(null);
final WeakReference<View> weakReference = new WeakReference<>(view);
final WeakReference<View.OnClickListener> listeneWeakReference = new WeakReference<>(listener);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
final View view1 = weakReference.get();
final View.OnClickListener listener1 = listeneWeakReference.get();
if (null != view1 && null != listener1) {
view1.setOnClickListener(listener1);
}
}
}, 1000);//延迟一秒
}
}
方法原理
1)当用户点击view之后,传入view和其listener;
2)设置view.setOnClickListener(null),使其点击事件失效;
3)把传入的view和listener使用弱引用(weakReference)保存;
4)使用handler延迟一秒之后执行操作;
5)从weakReference中获取view和listener,若view和listener都存在,则设置view1.setOnClickListener(listener1);重新给view设置点击事件;
为什么要使用弱引用?
为了不把传入的view和listener绑定死,故使用弱引用;