2012-06-07 4 views
3

Я использовал таймер обратного отсчета, как этоAndroid: отделка() из CountDownTimer называется, даже если отменить() называется

новый CountDownTimer (15000, 15) {

   public void onTick(long millisUntilFinished) { 

       long seconds=millisUntilFinished/1000; 
       long min=millisUntilFinished%100; 

       timeleft=(int) (seconds*1000+min); 
       if(millisUntilFinished>=10000) 
       { 
        changeText.setTextColor(Color.GREEN); 
       } 
       else if(millisUntilFinished>=5000) 
       { 
        changeText.setTextColor(Color.MAGENTA); 
       } 
       else 
       { 
        changeText.setTextColor(Color.RED); 

       } 
       changeText.setText(String.format("%02d", seconds)+ "."+String.format("%02d", min)+" sec"); 

      } 

      public void onFinish() { 

       timeleft=0; 
       missed++; 
        nametext.setTextColor(Color.RED); 
       nametext.setText("Time Up!"); 
         bottombutton.setVisibility(View.INVISIBLE); 
        globalflag=13; 
       changeText.setTextColor(Color.RED); 
       changeText.setText("0.00 Sec"); 
        Handler myHandler = new Handler(); 
        myHandler.postDelayed(mMyRunnablecif, 3000); 



      } 
      }.start(); 

На щелчка кнопки I вызвали cancel(), но он перестает считать на некоторое время, а затем вызывает onFinish(). Мне не нужно звонить onFinish() после вызова cancel(), есть ли какое-либо решение для этого. Любая помощь будет высоко оценена.

ответ

3

Внутри вашего onClick устанавливается логическое (например, нажатие кнопки) на true.

В вашей onFinish проверке это булева:

if (buttonPressed == true) 
{ 
    //do nothing 
} 
else 
{ 
    //run code 
} 
+0

ли onFinish () вспоминает об активности, в которой она принадлежит? или вызовы call back oncreate() – Moyeen

+0

onFinish() в отношении таймера обратного отсчета не подключен к активности. Это просто метод, вызываемый при завершении таймера обратного отсчета. – Tony

2

Вы можете использовать Timer вместо этого и сделать что-то вроде этого:

private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     // do your updates here 
     mUpdateTimeHandler.postDelayed(this, 1000); 
    } 
}; 

Handler mUpdateTimeHandler = new Handler(); 
mUpdateTimeHandler.postDelayed(mUpdateTimeTask, 100); 

При отмене задачи:

mUpdateTimeHandler.removeCallbacks(mUpdateTimeTask);