2016-07-07 64 views

回答

1

CountDownTimer无法重新启动,它只能使用一次。您必须创建自己的倒计时类,以处理重新启动,或者只需创建一个新的实例CountDownTimer并取消旧实例。

参见下面,我们有一个CountDownTimer倒计时10秒钟以1秒的间隔的示例代码,Button即(通过取消当前定时器和启动一个新的)复位点击时的定时器,以及一个TextView那显示当前计时器剩余的时间。

public class YourActivity extends Activity { 

    private CountDownTimer countDownTimer; 
    private TextView timerDisplayTextView; 

    private static final long TEN_SECONDS = TimeUnit.SECONDS.toMillis(10); 
    private static final long COUNTDOWN_INTERVAL = TimeUnit.SECONDS.toMillis(1); 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     Button myButton; // initialized here 
     // timerDisplayTextView initialized here 

     myButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       countDownTimer.cancel(); 
       countDownTimer = getNewCountDownTimer(TEN_SECONDS); 
       countDownTimer.start(); 
       showTimeInTextView(TEN_SECONDS); 
      } 
     }); 

     countDownTimer = getNewCountDownTimer(TEN_SECONDS); 
     countDownTimer.start(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     countDownTimer.cancel(); 
    } 

    private void showTimeInTextView(long millisecondsLeft) { 
     timerDisplayTextView.setText(TimeUnit.MILLISECONDS.toSeconds(millisecondsLeft) + " seconds left"); 
    } 

    private CountDownTimer getNewCountDownTimer(long length) { 
     return new CountDownTimer(length, COUNTDOWN_INTERVAL) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       showTimeInTextView(millisUntilFinished); 
      } 

      @Override 
      public void onFinish() { 

      } 
     }; 
    } 
}