[eclipse]我想在计时器中为我的按钮添加另一个动作

时间:2014-06-27 22:14:22

标签: java javascript android eclipse timer

伙计我是日食的新手,我在日食中练习计时器,我可以为我的代码提供一些帮助吗? 下面的代码就像我点击触发按钮计数时一样,它会触发另一次计数而不会停止前一次计数。

我在按下计数后尝试了按钮或反应它,我仍然想知道如何使相同的触发按钮获得重启计数功能。你可以直接嵌入我的代码来帮助我吗?我知道我太新了,日食,java甚至英国,一切,我需要你的解释,如果它不会占用太多。

Button countDownButton2 = (Button) findViewById(R.id.countDown1);      
countDownButton2.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view){

          CountDownTimer timer2 = new CountDownTimer(3000,1000){

                @Override
                public void onFinish() {

                    mTimeLabel1.setText("Times Up baby!");
                }

                @Override
                public void onTick(long millisUntilFinished) {                               

                      int seconds = (int) (millisUntilFinished / 1000);
                      int minutes = seconds / 60;
                      seconds = seconds % 60;

                      mTimeLabel1.setText("" + minutes + ":"
                                                      + String.format("%02d", seconds));

                }          
          }.start();

    }
});

1 个答案:

答案 0 :(得分:0)

您当前的解决方案是创建一个新的倒计时器,但不会停止旧的倒计时器。因此,如果再次单击该按钮,则会有2个倒计时器。当你说" new CountDowntimer"时,就是你创建它的时候。因此,在创建新的之前,请确保停止前一个。

    Button countDownButton2 = (Button) findViewById(R.id.countDown1);      
    countDownButton2.setOnClickListener(new View.OnClickListener() {  

    CountDownTimer timer2;
    public void onClick(View view){

          if(timer2!=null){
              timer2.cancel();
          }
          timer2 = new CountDownTimer(3000,1000){

                @Override
                public void onFinish() {

                    mTimeLabel1.setText("Times Up baby!");
                }

                @Override
                public void onTick(long millisUntilFinished) {                               

                      int seconds = (int) (millisUntilFinished / 1000);
                      int minutes = seconds / 60;
                      seconds = seconds % 60;

                      mTimeLabel1.setText("" + minutes + ":"
                                                      + String.format("%02d", seconds));

                }          
          }.start();

    }
});

<强>解释

以前,每次点击按钮都会有一个新的CountDownTimer。每个倒数计时器都在改变标签mTimeLabel1的值。创建新计时器是因为在点击列表中,您正在执行此操作:

CountdownTimer2 timer2 = new CountDownTimer(3000,1000)

这意味着,创建一个新的Timer,并保持对它的引用,称为timer2。 onClick方法完成后,计时器继续运行。但是,再次单击时,您将创建一个新计时器,并且旧计时器的新引用将丢失。引用不是旧的,而是新的。

因此,我们确保点击侦听器只有一个计时器。为此,我们在onClick方法之外移动对它的引用,以便我们可以保留对计时器的引用。然后我们可以确保在启动另一个计时器之前检查此计时器以取消它。但是,如果这是您第一次点击按钮,那么计时器将为空,因为&#34; new CountdownTimer&#34;尚未被召唤。因此,我们检查它是否为空(它不是第一次按下按钮),如果不是,则在创建新按钮之前取消旧按钮。如果是按下第一个按钮,我们不想打电话取消,因为没有计时器可以取消。