2012-11-15 190 views
7

我有一个按钮,当它按下时,它播放一个音频文件。我想在按钮上放置5秒的延迟,以便用户不会捣碎按钮并反复播放声音。我想我真的想让按钮在被按下5秒后被禁用。有谁知道如何做到这一点?ANDROID:按下按钮后如何延迟?

+1

但5秒延迟可能给用户的应用程序的存在的印象无响应 –

+0

如果音频的长度发生变化,或许您可以考虑在媒体播放器上进行回调 - http://stackoverflow.com/questions/6001497/calling-another-activity-when-mediaplayer-get-finished-playing - 而不是调用活动,你可以重新启用你的按钮 –

+0

使用'CountDownTimer' – Houcine

回答

29

在你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秒后再次启用它。

如果点击事件在扩展视图的类中处理,而不是在活动中执行,则执行相同的操作,但用post替换runOnUiThread

+0

完美的作品!非常感谢你 – fargoh

2

你在这里。

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

    } 
}); 
18

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

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

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