ANDROID: How to put a delay after a button is push

2019-02-09 06:10发布

I have a button and when it is pressed it plays an audio file. I want to put a 5 second delay on the button so users wont mash the button and play the sound over and over. I guess what i really want it for the button to be disabled for 5 seconds after it is pushed. Does anyone know how to do this?

3条回答
Lonely孤独者°
2楼-- · 2019-02-09 06:40

Here you go.

((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);

    }
});
查看更多
ゆ 、 Hurt°
3楼-- · 2019-02-09 06:43

In your onClickListener for the button:

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);

This will disable the button when clicked, and enable it again after 5 seconds.

If the click event is handled in a class that extends View rather than in an Activity do the same thing but replace runOnUiThread with post.

查看更多
ゆ 、 Hurt°
4楼-- · 2019-02-09 06:44

You can disable your button, then use the postDelayed method on your button.

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

This is similar to the Timer solution, but it might better handle configuration change (for example if the user rotate the phone)

查看更多
登录 后发表回答