在Android开发中,当完成一款软件时,测试人员会对软件进行测试,本来可以正常运行的软件在测试人员里就可以出现意想不到的bug,其中一个比较常见的问题就是短时间内重复点击一个按钮,本来正常点击只执行一次,但是在短时间内点击多次,好的情况是结果被执行多次,坏的情况就可能使程序崩溃,因此很多时候就必须对点击行为进行必要的处理,让程序在短时间内重复点击中只执行一次点击行为。下面介绍两种方式:
1、按钮不响应点击行为:
当点击一次按钮之后,短时间内不让按钮响应点击行为,代码如下:
mButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
//设置Button状态暂时无效,不响应任何操作
mButton.setEnabled(false);
//延时200毫秒之后将Button恢复为有效状态,可以响应点击状态
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
mButton.setEnabled(true);
}
}, 200);
}
});
2、按钮响应点击行为,不执行点击事件
上述第一种方式适用于按钮只有一种状态情况下,如果按钮状态需要改变,但是也要防止短时间内重复点击,则可以采用如下方式:
- 定义一个休眠类:
public class ClickSleep {
//默认休眠时间
public static final long DEFAULT_SLEEP_TIME = 500;
//线程运行标志位
private boolean isRuning = false;
//线程是否正在运行
public boolean isRuning() {
return isRuning;
}
//运行线程,开始休眠线程
public void runWithTime(final long defaultSleepTime) {
isRuning = true;
new Thread() {
@Override
public void run() {
try {
sleep(defaultSleepTime, 0);
} catch (InterruptedException e) {
e.printStackTrace();
}
isRuning = false;
super.run();
}
}.start();
}
}
然后在Activity中new 一个ClickSleep实例:mClickSleep = new ClickSleep();最后在点击事件中使用:mButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
if(!mClickSleep.isRuning()) {
//执行点击事件
clickEvent();
mClickSleep.runWithTime(ClickSleep.DEFAULT_SLEEP_TIME);
}
}
});