2016-08-08 4 views
1

Я делаю повторяющийся таймер обратного отсчета. Мне нужно, чтобы таймер обратного отсчета перезапускался с другим временем. Я использую глобальную переменную в конструкторе таймера обратного отсчета. Но проблема в том, что он всегда перезапускается от начала первого заданного интервала.Перезапустить таймер countodown с другим таймером android

public void chance(final int tota, final int cur, final int exercise,int pass,int flag) 
    { 
    Log.i("inside value","reached"); 


     a = new CountDownTimer((tempmilliseconds) * 1000 + 100, 1000) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       tempmilliseconds = (int) millisUntilFinished/1000; 
       Log.i("inside value",Integer.toString(tempmilliseconds)); 
       updatetimer(millisUntilFinished); 
      } 

      @Override 
      public void onFinish() { 
       mtext.setText("0:00"); 
       cancel(); 

       final Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         currentcompleted++; 
         if (on == 0) { 
          on = 1; 
          int exercis = MainActivity.restmint * 60 + MainActivity.restsec; 
          tempmilliseconds=exercis; 
          chance(tota, curr + 1, exercis, 0, 0); 
         } else { 
          on = 0; 

          int exercis = MainActivity.exermint * 60 + MainActivity.exersec; 
          tempmilliseconds=exercis; 

          chance(tota, curr + 1, exercis, 0, 0); 
         } 
        } 
       }, 1000); 

      } 
     }; 
     a.start(); 
    } 

Ниже приведен код для резюме операций:

public void resume(View view) { 
     Button mytext=(Button) findViewById(R.id.resume); 
     if(mytext.getText().toString()=="Pause") { 
      mytext.setText("Play"); 
      a.cancel(); 
     } 
     else { 
     mytext.setText("Pause"); 
     Log.i("Value of temp",Integer.toString(tempmilliseconds)); 
      a.start(); 
     } 
} 

Таймер останавливается, но при запуске в функции возобновления перезагружается с исходным временем и не указано tempmilliseconds.Note tempmilliseconds обновляется каждую секунду , Любая помощь/фрагменты/предложения оценены. Спасибо!

ответ

0

A CountDownTimer не позволит себе нарушаться в любом случае. Он будет помнить время, в которое он родился, пока кто-то не убьет его.

Если вы посмотрите на его документации, вы бы увидели, что он непосредственно наследует от класса Object и имеет только четыре метода: start(), cancel(), onFinish() (абстрактные) и onTick() (абстрактные). Это в значительной степени. Таким образом, вы в основном остаетесь без выбора, кроме как позвонить cancel(), а затем повторно инициализировать таймер. Или вы можете расширить класс CountDownTimer и инкапсулировать его под капот.

В любом случае стоимость отмены повторной инициализации объявлений может оказаться утомительной.