2017-04-01 73 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

完美之外。非常感谢 –