13

我有一个按钮,按下它会播放音频文件。我想在按钮上延迟 5 秒,这样用户就不会捣碎按钮并一遍又一遍地播放声音。我想我真的希望它在按下按钮后被禁用 5 秒。有谁知道如何做到这一点?

4

3 回答 3

37

在按钮的 onClickListener 中:

myButton.setEnabled(false);

Timer buttonTimer = new Timer();
buttonTimer.schedule(new TimerTask() {

    @Override
    public void run() {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                myButton.setEnabled(true);
            }
        });
    }
}, 5000);

这将在单击时禁用按钮,并在 5 秒后再次启用它。

如果单击事件是在扩展 View 的类中而不是在 Activity 中处理的,则执行相同的操作,但替换runOnUiThreadpost.

于 2012-11-15T13:11:13.787 回答
35

您可以禁用您的按钮,然后在您的按钮上使用postDelayed方法。

myButton.setEnabled(false);
myButton.postDelayed(new Runnable() {
    @Override
    public void run() {
        myButton.setEnabled(true);
    }
}, 5000);

这类似于 Timer 解决方案,但它可能更好地处理配置更改(例如,如果用户旋转手机)

于 2012-11-15T13:18:47.033 回答
5

干得好。

((Button) findViewById(R.id.click))
    .setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        ((Button) findViewById(R.id.click)).setEnabled(false);

        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                ((Button) findViewById(R.id.click))
                    .setEnabled(true);

            }
        }, 5000);

    }
});
于 2012-11-15T13:15:51.123 回答