2015-01-09 42 views
1

我创建了一个应用程序,它有一个切换按钮来启动和停止天文钟,就像秒表一样。当您第一次按下切换按钮(执行.start())时,计时器将开始计数,然后当您再次按下按钮(执行.stop())时,计时器会出现在屏幕上以停止计数,但是当它再次启动时,它会显示它实际上仍是在后台计算和显示,就好像它从来没有停止过

Android天文台启动和停止,但停​​止时进行计数

代码屏幕上的时间:

tglStartStop.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 

      if (tglStartStop.isChecked()) { 

       chronStopwatch.start(); 
      } 

      else { 

       chronStopwatch.stop(); 
      } 

     } 

    }); 
+1

只是一个猜测,但它似乎应该在调用'start()'之前立即调用'setBase(...)'。原因是'start()'和'stop()'不会改变'setBase(...)'方法最初设置的'base'时间。换句话说,“Chronometer”在停止后实际上并没有继续计数,但如果它停止/重新启动,计数将会相对于原始基准时间。 – Squonk

回答

7

之前添加此行“chronStopwatch.start();”

chronStopwatch.setBase(SystemClock.elapsedRealtime()); 
+2

这不是我在对OP问题的评论中建议的吗? – Squonk

+1

你的权利也适用于我的作品。 – Giridharan

+0

@Squonk好的,您刚刚给出了与Giridharan提供的工作解决方案很好地补充的理论的良好解释。 –