如何制作一个按钮,在单击时重新启动倒数计时器?



我有一个函数,它有一个计时器,每次单击按钮时我都想"重新启动"。我尝试这样做,但是当单击按钮几次时,当我只想要一个计时器时,似乎还有几个计时器仍在进行。我该如何解决这个问题?

所以,点击=>取消上一个计时器=>启动新计时器

public void startService(android.view.View view) {
final SharedPreferences sP = getSharedPreferences("com.example.safetyNet", MODE_PRIVATE);
final Button button = findViewById(R.id.button3);
final Intent transIntent = new Intent(this, CheckPinActivity.class);
CountDownTimer cdt = new CountDownTimer(sP.getInt("TiT", 10) * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
button.setText(String.valueOf(millisUntilFinished).substring(0,2));
}
@Override
public void onFinish() {
if(sP.getBoolean("lockedDown", false) == true){
startActivity(transIntent);
}
}
};
cdt.cancel();
cdt.start();
}

问题是,每次调用方法"startService(android.view.View view( {}"时,都会创建一个新的 CountDownTimer ,因此您创建的上一个 CountDownTimer 与这个引用不同。

为了解决这个问题,你必须创建 CountDownTimer 作为你的类的类成员:

public YourClass {
private CountDownTimer cdt;
.... (do whatever)....
public void startService(android.view.View view) {
final SharedPreferences sP = getSharedPreferences("com.example.safetyNet", MODE_PRIVATE);
final Button button = findViewById(R.id.button3);
final Intent transIntent = new Intent(this, CheckPinActivity.class);
if (cdt == null) {
cdt = new CountDownTimer(sP.getInt("TiT", 10) * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
button.setText(String.valueOf(millisUntilFinished).substring(0,2));
}
@Override
public void onFinish() {
if(sP.getBoolean("lockedDown", false) == true){
startActivity(transIntent);
}
}
};
} else {
cdt.cancel();
}
cdt.start();
}

希望对您有所帮助

相关内容

最新更新