2016-07-07 4 views
0

Я пытаюсь сделать пример использования таймера обратного отсчета с помощью кнопки и установить OnclickListener для этой кнопки. Мое значение по умолчанию - 10, и оно будет уменьшаться каждую секунду, как я могу вернуть свое значение обратно до 10?Сбросить значение по умолчанию при использовании OnclickListener в Android

+0

внутри позиции OnClickListener write myCurrentValue = 10; –

ответ

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() { 

      } 
     }; 
    } 
} 
Смежные вопросы