我正在制作一个简单的测验应用程序,其中包含10个问题,每个问题都有10秒倒数计时器。评分有效,而每个问题的答案正确地乘以CountDownTimer方法的剩余时间,因此它将是:score = answer * timeLeft;我从CountDownTimer成功获取了timeLeft的值。我设定的时间结束了,它会自动打算下一个问题。问题是,当我选择正确答案并点击下一个按钮时,它成功获取timeLeft值并将其乘以1(每个正确答案将为1点),但倒数计时器仍然一直持续到超过,所以当我已经移动到通过点击下一个按钮的另一个问题,上一个问题的时间仍然在运行,当它不幸的时候,它转移到上一个问题,时间尚未结束。我如何从setOnClickListener里面的CountDownTimer方法调用cancel()?
public void setTimer() {
//Initialize a new CountDownTimer instance
new CountDownTimer(millisInFuture,countDownInterval){
public void onTick(long millisUntilFinished){
//do something in every tick
//Display the remaining seconds to app interface
//1 second = 1000 milliseconds
cDown.setText("" + millisUntilFinished / 1000);
timeLeft = millisUntilFinished / 1000;
}
public void onFinish(){
//Do something when count down finished
cDown.setText("NEXT!");
Intent intent = new Intent(TestActivity1.this,TestActivity2.class);
intent.putExtra("score", score);
startActivity(intent);
finish();
timeLeft = 0;
}
}.start();
bNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cancel();
timeLeft = millisUntilFinished;
Intent intent = new Intent(TestActivity1.this,TestActivity2.class);
intent.putExtra("score", score);
startActivity(intent);
finish();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
});
}
答案 0 :(得分:1)
您需要为倒数计时器存储一个变量,以便可以调用和取消它。
final CountDownTimer timer = new CountDownTimer(millisInFuture,countDownInterval){......}
timer.start();
bNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timer.cancel();
.........
}
});
答案 1 :(得分:0)
而不是直接将其创建为new CountDownTimer
,
首先定义一个全局变量,如CountDownTimer cd
然后你可以随时使用cd的方法。