2017-04-01 74 views
0

我在Android中創建倒計時時間,並且我的計時器部分完美工作。但是,我想添加一個功能,用戶可以設置他們希望計時器重複的次數。這是我在執行當前的嘗試如何在Android中使用時間間隔CountdownTimer

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textView = (TextView) findViewById(R.id.textView); 
    minutesText = (EditText) findViewById(R.id.minutesText); 
    secondsText = (EditText) findViewById(R.id.secondsText); 
    startButton = (Button) findViewById(R.id.startButton); 
    intervalCount = (EditText) findViewById(R.id.intervalCount); 






    startButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (minutesText.getText().toString().equals("")) { 
       minutesInt = 0; 
      } else { 
       minutesString = minutesText.getText().toString(); 
       minutesInt = Integer.parseInt(minutesString); 

      } 

      secondsString = secondsText.getText().toString(); 
      if (secondsText.getText().toString().equals("")) { 
       secondsInt = 0; 

      } else { 
       secondsString = secondsText.getText().toString(); 
       secondsInt = Integer.parseInt(secondsString); 

      } 
      intervalsString = intervalCount.getText().toString(); 
      intervals = Integer.parseInt(intervalsString); 


      final int timerAmount = ((minutesInt * 60) + (secondsInt)) * 1000; 
      CountDownTimer timer = new CountDownTimer(timerAmount, 1000) { 
       @RequiresApi(api = Build.VERSION_CODES.N) 
       public void onTick(long millisUntilFinished) { 
        isRunning = true; 
        String timeLeft = String.format("%02d : %02d", 
          TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished), 
          TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
          TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)) 
        ); 
        textView.setText("Reamining: " + timeLeft); 
       } 
       public void onFinish() { 
        isRunning = false; 
        intervals--; 
        if (intervals > 0) { 
         timer.start(); 
        } 


        try { 
         Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
         Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
         r.play(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      };timer.start(); 

     } 
    }); 

我的錯誤是在onFinish() 它不會讓我用timer.start()

回答

1

CountDownTimer基本上採用的是處理器的線程是像其他線程不能一旦結束就重新啓動。

您需要在每個間隔中使用CountDownTimer的新實例。

所以你的情況,把

intervals--; 
if (intervals > 0) { 

    // for each interval left create a new CountDownTimer here and start it. 
} 

new CountDownTimer(timerAmount, 1000 } { 


    // do your operations here. 

} 
+0

完美之外。非常感謝 –