ANDROID:按下按钮后如何延迟?

far*_*goh 9 android button

我有一个按钮,按下它时播放音频文件.我想在按钮上放置5秒的延迟,这样用户就不会将按钮混合并反复播放声音.我猜我真正想要的是按钮在按下后被禁用5秒钟.有谁知道如何做到这一点?

Tof*_*erJ 32

在按钮的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);
Run Code Online (Sandbox Code Playgroud)

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

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


nic*_*ico 28

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

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

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


Vip*_*hah 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);

    }
});
Run Code Online (Sandbox Code Playgroud)