最近测试同学频繁提出一个bug,当对某个可执行按钮进行快速点击时,会触发多次点击效果,如多次刷新数据、多次跳转同一页面,极为影响用户体验。
其实问题本身很简单,多为进行了一些轻微耗时操作,如请求了接口,在接口异步请求未完全响应时再次发出请求(点赞、收藏等功能),又或者需要接口的某些数据来进行一些常规页面跳转动作等。简单和测试同学沟通了下,最为理想的状态时2秒内给出用户反馈,因此我对点击事件的延迟时间默认设置为2秒,如果接口响应速度巨慢或者逻辑极为复杂建议使用加载dialog来提示用户。
工具类代码:
/**
* @author YDS
* @date 2020/8/18
* @discribe multi click
*/
class MultiClickUtil {
private static int DELAY_TIME = 2000; //点击间隔延迟2000毫秒
private static boolean isCanClick = true; //是否允许点击
private static long lastClickTime = 0; //上一次点击时间戳
/**
* 点击按钮事件
*
* @param listener
*/
public static void clickButton(OnClickListener listener) {
//获取两次点击事件得时间差
long timeDifference = System.currentTimeMillis() - lastClickTime;
//如果时间差大于我们设定的点击间隔时间,则允许用户点击
if (timeDifference > DELAY_TIME) {
isCanClick = true;
} else {
isCanClick = false;
}
if (isCanClick) {
lastClickTime = System.currentTimeMillis();
listener.onClick();
}
}
/**
* 允许点击事件回调
*/
interface OnClickListener {
void onClick();
}
}调用代码:
bt_intent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MultiClickUtil.clickButton(new MultiClickUtil.OnClickListener() {
@Override
public void onClick() {
++clickNum;
Toast.makeText(MainActivity.this, "第" + clickNum + "次点击", Toast.LENGTH_SHORT).show();
}
});
}
});
版权声明:本文为Simon_YDS原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。