我这样使用倒数计时器
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();
在按钮上单击我调用了cancel(),但它停止计数一段时间,然后调用onFinish()。我不需要在调用cancel()之后调用onFinish()是否有任何解决方案。任何帮助将受到高度赞赏。
答案 0 :(得分:3)
在onClick
内设置一个布尔值(例如buttonPressed)为true。
在onFinish
中查看此布尔值:
if (buttonPressed == true)
{
//do nothing
}
else
{
//run code
}
答案 1 :(得分: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);
答案 2 :(得分:0)
尽管调用cancel(),我也不明白为什么onFinish会被调用。我猜想唯一的解决方法是仅对onFinish中的呼叫进行空检查,以防止发生NPE。
public void onFinish() {
if (nametext == null || bottombutton == null || changeText == null || ... ) {
return;
}
...