Android: finish() of CountDownTimer is called even if cancel() is called

偶尔善良 提交于 2019-12-10 18:13:58

问题


I have used Countdown Timer like this

new 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(); 

On a button click I have called cancel() but it stops counting for a while and then calls onFinish(). I need not to call onFinish() after calling cancel(). Is there any solution for this. Any help will be highly appreciated.


回答1:


Inside your onClick set a Boolean (buttonPressed for example) to true.

In your onFinish check this Boolean:

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



回答2:


You could use Timer instead and do something like this:

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

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

When cancelling the task:

mUpdateTimeHandler.removeCallbacks(mUpdateTimeTask);


来源:https://stackoverflow.com/questions/10927112/android-finish-of-countdowntimer-is-called-even-if-cancel-is-called

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!