2017-04-01 15 views
0

Androidでカウントダウンの時間を作成していて、タイマーの部分が完璧に動作しています。しかし、私は、ユーザーがタイマーを繰り返す回数を設定できる機能を追加したいと思います。これは、実装時の私の現在の試みですAndroidでインターバルを使用する方法CountdownTimer

私のエラーがonFinish() である
@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(); 

     } 
    }); 

それは文句を言わない私がtimer.start()

答えて

1

CountDownTimerは基本的に他のスレッドのようなものですハンドラのスレッドを使用して使用することはできませんしましょう終了したら再起動してください。

各間隔でCountDownTimerの新しいインスタンスを使用する必要があります。

だからあなたの場合には、

new CountDownTimer(timerAmount, 1000 } { 


    // do your operations here. 

} 
+0

パーフェクトの

intervals--; if (intervals > 0) { // for each interval left create a new CountDownTimer here and start it. } 

外をもたらします。どうもありがとうございます –

関連する問題