簡體   English   中英

單擊后,如何制作一個可重啟CountdownTimer的按鈕?

[英]How do I make a Button which restarts a CountdownTimer, when clicked?

我有一個帶有計時器的函數,每當您單擊該按鈕時,我都希望它“重新啟動”。 我嘗試執行此操作,但是當多次單擊按鈕時,似乎只有幾個定時器仍在運行。 我該如何解決?

因此,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();

}

問題在於,每次調用方法“ 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();
}

希望對您有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM