2015-09-01 102 views
1

我需要找到一種方法來阻止多個定時器的發生。我必須有一個帶有可選擇的倒數計時器間隔的彈出菜單。我找到了一個適用於創建計時器的解決方案。但是,如果一個人正在進行,並且您從菜單中選擇了另一個,他們將一起運行。在Android中停止多個倒計時器定時器

我需要找出要添加的代碼,以便當第二個倒計時選項被選中時,第一個倒數計時器停止。

... 

@Override 
public boolean onMenuItemClick(MenuItem item) { 

    switch (item.getItemId()){ 
     case R.id.countdownMenu1: 
      CounterClass timer = new CounterClass(10000, 1000); 
      timer.start(); 
      return true; 

     case R.id.countdownMenu2: 
      timer = new CounterClass(15000, 1000); 
      timer.start(); 
      return true; 

     default: 
      return false; 
    } 
} 


public class CounterClass extends CountDownTimer { 

    public CounterClass(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 

     long millis = millisUntilFinished; 
     String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), 
       TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), 
       TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))); 
     System.out.println(hms); 
     textViewTime.setText(hms); 
    } 

    @Override 
    public void onFinish() { 
     // textViewTime.setText("Completed."); 
     System.exit(0); 
    } 
... 

從菜單中選擇每一次的效果很好,只要你不再嘗試再次嘗試。然後我顯示兩個倒數時間,並且首先執行onFinish。

+0

我不明白這個問題。取消方法不適合你?據我所知,你只需要取消當前計時器,如果它目前正在運行。是嗎? – kolombo

+0

問題是我沒有使用單獨的取消按鈕。我只使用彈出菜單的按鈕。如果你從菜單中選擇15分鐘,它工作正常。如果你再次點擊菜單並選擇10分鐘,現在你有兩個計時器試圖同時運行。我認爲在新車開始前會有一個簡單的檢查來關閉舊車,但可能不會。在倒數計時器中設定時間很容易。它每次重置。當我嘗試做出可選的持續時間時,我遇到了問題。 –

+0

因此,您需要:點擊第一個菜單項 - >啓動計時器15分鐘。之後,如果點擊2菜單項 - > 15分鐘取消第一個定時器,並啓動定時器10分鐘。我是對的? – kolombo

回答

0
private CounterClass timer; 

@Override 
public boolean onMenuItemClick(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.countdownMenu1: 
      startTimer(10000, 1000); 
      return true; 
     case R.id.countdownMenu2: 
      startTimer(15000, 1000); 
      return true; 
     default: 
      return false; 
    } 
} 

public void startTimer(long millisInFuture, long countDownInterval) { 
    cancelTimer(); 
    timer = new CounterClass(millisInFuture, countDownInterval); 
    timer.start(); 
} 

private void cancelTimer() { 
    if (timer != null) { 
     timer.cancel(); 
    } 
} 
+0

我試圖添加,但它說:條件'計時!=空'總是'真'。 –

+0

對不起。可能我不清楚這個問題。晚上過後我會再讀一遍。 – kolombo

+0

@Eric Patterson我更新了我的答案。告訴我在這種情況下有什麼問題。 – kolombo