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

Java [eclipse]我想为计时器中的按钮添加另一个移动,java,javascript,android,eclipse,timer,Java,Javascript,Android,Eclipse,Timer,伙计们,我是eclipse新手,我正在eclipse中练习计时器,我的代码可以得到一些帮助吗? 下面的代码就像我在计数时单击触发器按钮一样,它将触发另一个计数而不停止上一个计数 我试过chancel按钮或在倒计时后对其进行反应,但我想知道如何使相同的触发按钮获得重新启动计数功能。你能帮我直接嵌入我的代码吗?我知道我对eclipse、java甚至英语都太陌生了,我需要你的解释,如果你不太在意的话 Button countDownButton2 = (Button) findViewById(R.i

伙计们,我是eclipse新手,我正在eclipse中练习计时器,我的代码可以得到一些帮助吗? 下面的代码就像我在计数时单击触发器按钮一样,它将触发另一个计数而不停止上一个计数

我试过chancel按钮或在倒计时后对其进行反应,但我想知道如何使相同的触发按钮获得重新启动计数功能。你能帮我直接嵌入我的代码吗?我知道我对eclipse、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();

    }
});

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

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

    }
});
解释

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

CountdownTimer2 timer2 = new CountDownTimer(3000,1000)
这意味着,创建一个新的计时器,并保留一个名为timer2的引用。onClick方法完成后,计时器继续运行。但是,当您再次单击时,将创建一个新计时器,而对旧计时器的新引用将丢失。这不是指旧的,而是指新的


因此,我们要确保click侦听器只有一个计时器。为此,我们将对它的引用移动到onClick方法之外,这样我们就可以保留对计时器的引用。然后,我们可以确保在启动另一个计时器之前检查此计时器以取消它。但是,如果这是您第一次单击按钮,则计时器将为空,因为尚未调用“new CountdownTimer”。因此,我们检查它是否为null(不是第一次按下按钮),如果不是,则在创建新按钮之前取消旧按钮。如果是第一次按下按钮,我们不想调用cancel,因为没有计时器可以取消。

请您尝试将您的问题组织得更好一点好吗?当你按下按钮时,我发现很难准确地理解你想要发生什么。是的,先生,这就像我第一次按下按钮时,计数视图开始。但是,如果我在计数过程中再次按下触发按钮,它将触发另一次计数,而不停止上一次计数。我想将其渲染为如果在计数过程中再次按下按钮,我可以在同一时间重新开始计数button@NutterzUK大人,我可以向您寻求帮助吗?\我还没有测试这个,因为我没有整个项目,但它应该可以工作。好的,让我知道它是如何运作的好的,让我给主要答案加一个解释,一个月。好的,先生,谢谢!