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