单击后,如何制作一个可重启CountdownTimer的按钮?

时间:2018-08-21 14:27:38

标签: java android

我有一个函数,其中包含一个计时器,每次单击按钮时,我都想“重启”计时器。我尝试执行此操作,但是当多次单击按钮时,似乎只有几个定时器仍在运行。我该如何解决?

因此,onClick =>取消上一个计时器=>启动新计时器

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

}

1 个答案:

答案 0 :(得分:0)

问题在于,每次调用方法“ startService(android.view.View view){}”时,都会创建一个新的CountDownTimer,因此之前创建的CountDownTimer与该引用不同。 / p>

要解决此问题,您将必须创建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();
}

希望对您有帮助