1.概况:
在app 使用中经常遇到界面中按钮 点击时 连续点击两次或者多次,导致按钮下逻辑功能重复执行,造成资源浪费甚至程序出错,为了尽量避免这种情况出现,提出防抖动方法。
2.实现思路
<1. 主要思路为 通过两次点击的时间差,来对比是否在最短时间内,来判断点击是否有效。
<2. 不同view 通过对比当前点击View 的id 判断是否是同一个view,如果是同一个view 进行防抖动校验,如果不是同一个view,重置当前校验。
3.代码实现
public class NoDoubleClickUtil {
public static int mId = -1;
private static long mFirstClickTime;//记录首次点击时间
public static boolean checkDoubleClick(int id) {
long clickTime = System.currentTimeMillis();//记录当前点击时间
if (mId == -1 || mId != id) {//不同view,重置
mId = id;
mFirstClickTime = clickTime;
return true;
}
if (clickTime - mFirstClickTime > Constant.NO_DOUBLE_CLICK_TIME) {
//判断当前时间差是否大于校验时长,如果大于 判断为此次不是无效点击
mFirstClickTime = clickTime;
return true;
} else {
return false;
}
}
}
4.代码中使用
@OnClick({R.id.tv_text1, R.id.tv_text2})
public void onViewClicked(View view) {
if (!NoDoubleClickUtil.checkDoubleClick(view.getId())) {//判断如果是错误点击,直接返回,不执行操作
return;
}
switch (view.getId()) {
case R.id.tv_text1:
ToastUtils.showShortToast(MyApplication.mContext, "点击1:" + System.nanoTime());
break;
case R.id.tv_text2:
ToastUtils.showShortToast(MyApplication.mContext, "点击2:" + System.nanoTime());
break;
}
}