2010-06-29 42 views
17

Tôi đang mở rộng lớp CountDownTimer để có được một số chức năng tùy chỉnh .Trong onTick() trong trường hợp một số điều kiện được đáp ứng, tôi gọi cancel(), hy vọng nó sẽ kết thúc, tuy nhiên callback onTick() gọi đến khi đạt đến số đếm ngược. Vậy làm thế nào để ngăn chặn điều này xảy ra?cách dừng/hủy android CountDownTimer

Trả lời

18

Phương thức CountDownTimer.cancel() dường như không hoạt động. Đây là một chủ đề khác không có giải pháp Timer does not stop in android.

Tôi khuyên bạn nên sử dụng Bộ hẹn giờ thay thế. Nó linh hoạt hơn nhiều và có thể bị hủy bất cứ lúc nào. Nó có thể là một cái gì đó như thế:

public class MainActivity extends Activity {  
    TextView mTextField; 
    long elapsed; 
    final static long INTERVAL=1000; 
    final static long TIMEOUT=5000; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mTextField=(TextView)findViewById(R.id.textview1); 

     TimerTask task=new TimerTask(){ 
      @Override 
      public void run() { 
       elapsed+=INTERVAL; 
       if(elapsed>=TIMEOUT){ 
        this.cancel(); 
        displayText("finished"); 
        return; 
       } 
       //if(some other conditions) 
       // this.cancel(); 
       displayText("seconds elapsed: " + elapsed/1000); 
      } 
     }; 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(task, INTERVAL, INTERVAL); 
    } 

    private void displayText(final String text){ 
     this.runOnUiThread(new Runnable(){ 
      @Override 
      public void run() { 
       mTextField.setText(text); 
      }}); 
    } 
} 
+4

Chỉ cần thực hiện một sự thay thế thả-in cho CountDownTimer rằng bạn có thể hủy từ bên trong onTick: https://gist.github.com/737759 –

+0

@GautierHayoun Bằng phương pháp nào bạn tôi có thể hủy bỏ trong onTick, nhưng onTick () vẫn sẽ được gọi, không biết lý do tại sao – Deqing

15

CountDownTimer cũng đang làm việc tốt cho tôi, nhưng tôi nghĩ rằng nó chỉ hoạt động nếu bạn gọi nó NGOÀI của implemetation CountDownTimer (có nghĩa là không gọi nó trong onTick).

Gọi điện bên trong cũng không hoạt động.

+3

Yea, gọi nó trong onTick doesnt dường như hoạt động. Tôi đã gọi onFinish và cố gắng hủy bộ đếm ngược trong bên trongFinish và nó đã hoạt động – Basher51

0

Tôi đã thử đoạn mã này, vì hầu hết các câu trả lời đều cho biết bạn không thể hủy bộ hẹn giờ bên trong việc triển khai, do đó tôi đã thử sử dụng trình xử lý bên trong onFinish. Bài cũ nhưng nếu có ai đi qua nó hữu ích của nó.

new Handler().post(new Runnable() { 
      @Override 
      public void run() { 
       timerTextView.setText("00:" + String.format("%02d", counter)); 
       cancel(); 
      } 
     }); 
Các vấn đề liên quan