2017-04-01 5 views
0

Ich erstelle eine Countdown-Zeit in Android und ich habe den Timer Teil funktioniert perfekt. Ich möchte jedoch eine Funktion hinzufügen, mit der der Benutzer festlegen kann, wie oft der Timer wiederholt werden soll. Dies ist mein aktueller Versuch UmsetzungSo verwenden Sie Intervalle in 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(); 

     } 
    }); 

Mein Fehler in der OnFinish ist() es mich nicht benutzen lassen timer.start()

Antwort

1

CountDownTimer grundsätzlich verwendet einen Handler Threads, wie andere Threads ist nicht neu gestartet werden, sobald es beendet ist.

Sie müssen in jedem Intervall eine neue Instanz des CountDownTimers verwenden.

Also in Ihrem Fall bringen die

intervals--; 
if (intervals > 0) { 

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

außerhalb von

new CountDownTimer(timerAmount, 1000 } { 


    // do your operations here. 

} 
+0

Perfect. Ich danke dir sehr –

Verwandte Themen