我是Android开发的新手,请原谅我这个问题。
所以我有一个按钮,当点击它时,它会调用一个名为btnDelay(btnName)
的方法。
在这个方法中就是这行代码:
private void btnDelay(final Button btn){
btn.setEnabled(false);
/*if (counter == 0){
counter++;
}*/
Timer buttonTimer = new Timer();
buttonTimer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
btn.setEnabled(true);
}
});
}
}, 5000);
}
这将禁用 5秒的按钮。
现在我要做的是当用户再次点击该按钮并且5秒未完成时,将显示一个Toast,说明用户的操作过于频繁。
有没有办法可以做到这一点?我正在考虑使用一个计数器来计算用户点击该特定按钮的次数,并在TimerTask完成5秒后重置为0。但有更简单的方法吗?谢谢。
答案 0 :(得分:5)
如果被禁用,您的按钮不会触发onClick
事件。因此,不要禁用它,而是将颜色设置为灰色或其他某些内容,使看起来禁用,然后在按钮的onClick
处理程序中设置:
if(enabled){
btnDelay();
}
else {
sendAToast();
}
然后在btnDelay()
中设置enabled = false
(并根据需要将颜色设置为灰色),并在run()
内设置enabled = true
。
另外,请不要忘记班级顶部的private boolean enabled = true
:)
答案 1 :(得分:1)
您应该为按钮状态声明一个布尔变量。因为如果你写btn.setEnabled(false);
,buttonClickEvent
就不会被触发五秒钟。
boolean btnState = true;
private void btnDelay(final Button btn){
if (btnState){
Timer buttonTimer = new Timer();
buttonTimer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
btnState = false;
}
});
}
}, 5000);
}else{
Toast.makeText(this, "your_message", Toast.LENGTH_SHORT).show();
}
}