1
我正在編寫一個HIIT(高強度間隔訓練)活動,爲此我正在實現一個間隔計時器。 CountDownTimer應該完成5分鐘的熱身,然後繼續進行HIIT訓練。android:onFinish()for CountDownTimer在聲明新聲明之後調用
public class WarmUpActivity extends ActionBarActivity{
TextView Mode;
TextView Time;
int minutes;
long time_remaining;
boolean warmup_finished;
private CountDownTimer HIIT_Timer;
private void StartTimer() {
HIIT_Timer = new CountDownTimer(time_remaining, 1000) {
@Override
public void onTick(long millisUntilFinished) {
time_remaining = millisUntilFinished; //in case activity is paused or stopped
Time.setText(" " + (int)floor(millisUntilFinished/60000) + ":" + ((millisUntilFinished/1000) % 60));
if (warmup_finished == true) { //if we are in HIIT mode
if ((int)millisUntilFinished % 60000 == 0) { //every minute
if (Mode.getText() == "Low Intensity")
Mode.setText("High Intensity");
else
Mode.setText("Low Intensity");
}
}
}
@Override
public void onFinish() {
if (warmup_finished==false){
Mode.setText("Low Intensity");
warmup_finished = true;
HIIT_Method();
return;
}
else {
Completed_Method();
return;
}
}
}.start();
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.hiit_layout);
Mode=(TextView) findViewById(R.id.mode);
Time=(TextView) findViewById(R.id.time);
warmup_finished=false;
Mode.setText("Warm-Up");
time_remaining=5*60000; //5 minutes when created
}
@Override
public void onStart(){
super.onStart();
StartTimer();
return;
}
private void HIIT_Method(){
minutes=getIntent().getIntExtra(SelectHIITDuration.MINUTES, 0);
time_remaining=minutes*60000;
StartTimer();
return;
}
private void Completed_Method(){
Mode.setText("Workout Completed");
}
}
當暖機完成並onFinish()
被稱爲首次,HIIT_Method
被調用,其中,所述定時器HIIT應該開始與用戶指定的持續時間。問題是,在使用Start_Timer()
聲明新定時器之後,以某種方式調用Completed_Method
。它只能從onFinish()
調用。爲什麼在聲明新的定時器後調用onFinish()
?
你有沒有打過電話您最初的START_TIMER在OnCreate中代替的OnStart?不知道這是否會解決任何問題。 – vkuo
謝謝。這工作。我的新計時器啓動時不會執行Completed_Method()。我不知道爲什麼這工作。一個解釋將非常感謝,因爲我是新的android開發。 – JackOfAllTrades
發送回答,讓我知道這是否令人滿意。 – vkuo