0

我想在事件之间使用计时器,例如:用户必须在点击按钮之间等待 30 秒,我该怎么做?!

Button b=(Button)findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
  @Override
   public void onClick(View v) {

   }
});
4

3 回答 3

2

你的意思是按钮应该每30秒只能点击一次?在那种情况下,我会做这样的事情:

public void onClick(View v) {
    long time = System.System.currentTimeMillis();
    if(time >= lastClickTime + (30 * 1000) || lastClickTime == 0){
        lastClickTime = time;
        ...
    }
}
于 2013-06-22T01:26:37.833 回答
1

您可以使用单独的ThreadpostDelayed

这个 SO 答案显示了如何做到这一点以及其他几个选项

您将在您的功能中禁用Button然后重新onClick()启用它run()

处理程序

定时器任务

CountDownTimer将是另一种方式。您只需重新启用ButtoninonFinish()

你可以看看这些,看看哪个最适合你的特定情况

这些是您可以完成此任务的一些方法。但是,如果您在这里告诉我们您的最终结果,我们可能会帮助您找到更好的方法。您不希望用户在 30 秒内不能做任何事情

于 2013-06-22T01:24:38.657 回答
0

您可以像这样使用处理程序的 postDelayed 方法:

Button b; // instance variable


// now in onCreate


b = (Button)findViewById(R.id.button1);     

final Handler handler = new Handler();

handler.postDelayed(new Runnable() {

    @Override
    public void run() {
        OuterClass.this.b.setEnabled(true);
    }

}, 30000); // 30 seconds = 30000 ms


b.setEnabled(false);


b.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {           
        // do whatever you have to do
    }

});
于 2013-06-22T01:47:35.660 回答