经常点击按钮时显示Toast

时间:2018-01-15 14:28:42

标签: java android

我是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。但有更简单的方法吗?谢谢。

2 个答案:

答案 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();
    }
}