关于Android避免按钮重复点击事件

时间:2024-09-06 20:35:50

最近测试人员测试我们的APP的时候,喜欢快速点击某个按钮,出现一个页面出现多次,测试人员能不能禁止这样。我自己点击了几下,确实存在这个问题,也感觉用户体验不太好。于是乎后来我搜了下加一个方法放在我们Utils类里

// 判断按钮是否快速点击
private static long lastClickTime;
public synchronized static boolean isFastClick() {
long time = System.currentTimeMillis();
if (time - lastClickTime < 500) {
return true;
}
lastClickTime = time;
return false;
}

这样我就在onclick()方法里加如下代码

public void onClick(View v) {
if(Utils.isFastClick){
return;
}
}

加了之后,的确是禁用了某个界面的的重复点击,于是我就高兴地告诉测试人员我解决了这个问题,他看了之后,也说了没问题了。但是好景不长,他就又在其他页面发现可以重复点击,有特么出现多个页面了,说最后都不要重复点击。下班的路上我左思右想,还点击其他的APP,发现都没有重复点击事件。第二天早上我起床的时候,突然冒出一个想法,如果我在父类实现onclicklistener方法 重写onclick方法,然后写一个禁止重复点击的方法,那么子类就应该不会出现重复点击事件了。于是我google了好久,没有发现一个比较好的例子,在我们组经验丰富程序员的帮助下,这里也非常感谢他,呵呵,为此我给了他一个苹果。最终有了以下的代码。

禁止重复点击
public void avoidDouleClick(View v) {
clickView = v;
if (oldId == -1) {
lastClickTime = SystemClock.elapsedRealtime();
oldId = v.getId();
return;
} else if (v.getId() == oldId) {
long time = SystemClock.elapsedRealtime();
if (time - lastClickTime < 500) {
v.setId(0);
return;
}
} else if (v.getId() == 0) {
lastClickTime = SystemClock.elapsedRealtime();
v.setId(oldId);
}
}

这个思路其实就是禁止一个button的id连续点击超过500毫秒,这样不就避免了重复点击事件。这样子Activity重写onClick()方法,这样子类就不要再次实现OnClickListener接口了,就能少写点代码了。

@Override
public void onClick(View v) {
super.onClick(v);
}

当然,在BaseFragment也要像BaseActivity一样。这样就能禁止Actvitity和Fragment的重复点击事件了。