最近开发完项目,测试妹子告诉我频繁点击某个按钮,导致程序在短时间内进行多次数据提交或者数据处理,好*疼的一个问题啊。。。你没事点击那么多次干嘛,,,发牢骚归发牢骚,问题环视要解决滴,不然会让妹纸看不起哥们·····
那么如何有效避免这种情况的发生呢?
我的想法是,判断用户点击按钮间隔时间,如果间隔时间太短,则认为是无效操作,否则进行相关业务处理
首先将这块提取为工具类(方便接下来的调用),现在就起名为:OnClickUtils
/**
* 防止按钮多次重复点击
*/
public class OnClickUtils {
private static long lastClickTime = 0;
private static long DIFF = 1000;
private static int lastButtonId = -1;
/**
* 判断两次点击的间隔,如果小于1000,则认为是多次无效点击
*
* @return
*/
public static boolean isFastDoubleClick() {
return isFastDoubleClick(-1, DIFF);
}
/**
* 判断两次点击的间隔,如果小于1000,则认为是多次无效点击
*
* @return
*/
public static boolean isFastDoubleClick(int buttonId) {
return isFastDoubleClick(buttonId, DIFF);
}
/**
* 判断两次点击的间隔,如果小于diff,则认为是多次无效点击
*
* @param diff
* @return
*/
public static boolean isFastDoubleClick(int buttonId, long diff) {
long time = System.currentTimeMillis();
long timeD = time - lastClickTime;
if (lastButtonId == buttonId && lastClickTime > 0 && timeD < diff) {
Log.v("isFastDoubleClick", "短时间内按钮多次触发");
return true;
}
lastClickTime = time;
lastButtonId = buttonId;
return false;
}
}
Java文件中使用方式
case R.id.tv_withdrawal:
if (!OnClickUtils.isFastDoubleClick(R.id.tv_withdrawal)){//点击事件判断
String i = mTvMoney.getText().toString().trim();
startActivity(new Intent(getActivity(), WithdrawalActivity.class).putExtra("Money", Money));
}
break;
case R.id.bt_balance://充值
if (!OnClickUtils.isFastDoubleClick(R.id.bt_balance)){
startActivity(new Intent(getActivity(), TopUp.class));
}