2016-03-17 81 views
0

我有一個問題重複倒計時器多次,在我的情況下12次。我已經做了兩個倒計時定時器,一個用於輪迴,一個用於暫停並且工作良好。問題是當暫停完成時,我想讓該倒計時開始自動重新開始,直到有12個循環暫停完成。 我用loop.Is有更好的方法嗎?如何循環倒計時定時器多次

這裏是代碼:當用戶點擊該按鈕倒計時開始

button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      long roundtime= Long.parseLong(String.valueOf(msg1))*1000;//user has picked roundtime 
      Counting timer = new Counting(roundtime, 100);//class Counting extends CountdownTimer 
      for(int i=0;i<12;i++){ 
       timer.start(); // It goes just ones! 
      } 




     } 

倒計時器:

  class Counting extends CountDownTimer { 

      public Counting(long roundtime, long countDownInterval) { 
       super(roundtime, countDownInterval); 
      } 
      @Override 
      public void onTick(long millisUntilFinished) { 
       textView.setText("" + String.format("%02d:%02d", 
         TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
           TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), 
         TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
           TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); 
      } 
      @Override 
      public void onFinish() { // When roundtime is finished,start pause time! 
       int seconds = msg1 % 60; 
       int minutes = (msg1/60) % 60; 
       textView.setText(String.format("%02d : %02d", minutes, seconds)); 
       long pause= Long.parseLong(String.valueOf(msg2))*1000; //user has picked pause time 
       Counting2 timer2 = new Counting2(pause, 100); 
       timer2.start(); 
      } 
     } 
     class Counting2 extends CountDownTimer { 

      public Counting2(long pause, long countDownInterval) { 
       super(pause, countDownInterval); 
      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
       textView2.setText("" + String.format("%02d:%02d", 
         TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
           TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), 
         TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
           TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); 
      } 

      @Override 
      public void onFinish() { 
       int seconds = msg2 % 60; 
       int minutes = (msg2/60) % 60; 
       textView2.setText(String.format("%02d : %02d", minutes, seconds)); 
      } 
     } 

    }); 
} 
+0

你看上了一個Handler嗎?它可能提供一個更簡單的實現。 – mjstam

+0

mjstam,不,我沒有。 –

回答

0

首先,你想讓它循環12次。 但這並不是問題所在,但是,當它只循環11次時,您會感謝我。

應該

for(int i=0;i<=12;i++){ 
      timer.start(); // It goes just ones! 
     } 

由於我不知道Counting2實施,它出現在啓動功能是越來越掛在那裏。我不知道它是否被覆蓋。如果您有類似的onFinish方法,則這是由於對原始Counting timer的遞歸回調。因此,它會在兩者之間等待一段時間(它不會因爲「迅速」而導致堆棧溢出)。

+0

DarmaniLink,這是Counting2類的樣子。我已經在上面編輯它了。你有什麼吸引力? –

+0

正確面對大括號後的括號是什麼?我沒有看到它關閉任何東西。 – DarmaniLink

+0

另外,我猜CountDownTimer是一個抽象類,所以在那裏沒有任何'可能的'錯誤。真的,我會做的只是將它打印出來,並隨機選擇一個帶有各種標識符的點,如print(「Reached1」),「reached2」等等,這樣你就可以確定它被掛起的位置。基本上在循環和方法調用之前以及在這些之前。 – DarmaniLink

0

嘗試忙等待爲前一個計時器完成,然後再次啓動它,它會這樣做12次。

for(int i=0;i<12;i++){ 
      while(!previousTimerActive); 
      timer.start(); 
      previousTimerActive = true; 
     } 

而在你Counting2onFinish()設定的指標previousTimerActive = false;。現在你只需要看看你想要這個boolean previousTimerActive是'全球'(所以它可以從你的活動和你的類Counting2訪問)。你可以得到它並將其設置在SharedPreferences中,或者使用第三方工具(如EventBus)將其值從一個發送到另一個。