2011-05-15 160 views
0

我使用這個Android類實現倒計時:http://developer.android.com/reference/android/os/CountDownTimer.html倒數計時器問題

我已經創建了一個自己的類我的計算:

public class MyCount extends CountDownTimer{ 

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

@Override 
public void onFinish() { 
tv_test.setText(""); 
} 

@Override 
public void onTick(long millisUntilFinished) { 
tv_test.setText("d"+ (millisUntilFinished/(3600000*24))+ " h: "+ (millisUntilFinished/3600000)%24 +" m: " + (millisUntilFinished/60000) % 60 + " sec: "+ (millisUntilFinished/1000) % 60); 

} 

} 
處理通信

()我的活動我有這樣的代碼:

MyCount counter = new MyCount(time, 1000); 
     counter.start(); 

現在的問題是:如果我定位到下一個活動回來時,countdowntimer再次啓動,並有運行兩個倒計時。

我不能把它放在onCreate()中,因爲時間變量可以被用戶改變。他改變了它的其他活動

回答

1

嘗試添加布爾 例如:

booelan counterIsLaunched = false; 
boolean timeChanged = false; 

,並在您的實現櫃檯補充一點:

@Override 
public void onFinish() { tv_test.setText(""); 
counterIsLaunched = false; 
if(timeChanged) start(); 
} 
@Override 
public void onTick(long millisUntilFinished) { 
tv_test.setText("d"+ (millisUntilFinished/(3600000*24))+ " h: "+ (millisUntilFinished/3600000)%24 +" m: " + (millisUntilFinished/60000) % 60 + " sec: "+ (millisUntilFinished/1000) % 60); 
counterIsLaunched = true; 
if(timeChanged) start(); 
} 

,並在您在onStart()嘗試以測試變量

if(counter.getCounterIsLaunched() == false) { 
counter.start(); 
} 

,當你改變了計時器,這樣做mething這樣的:

counter.getTimeChanged() = true; 

希望它可以幫助人:)

+0

@houcine:好主意!我還有一個問題:用戶可以通過改變產品的價格來改變計數器。所以不知何故,我必須取消計時器並安排新的計劃。 – tobias 2011-05-15 18:35:27

+0

@tobias:我知道你希望你的計數器應該被取消並重新啓動,如果用戶改變了時間 是你的意思? – Houcine 2011-05-15 18:37:44

+0

@houcine:thx!我剛剛將上面的代碼添加到了我的項目中。但是如果(counter.getCounterIsLaunched()== false)總是如果我從其他活動回來。是的,你最後的問題是我最後想要的:) – tobias 2011-05-15 18:49:33