2011-01-25 10 views
6

Ciao a tutti, sto cercando di far ricominciare il mio CountDownTimer al suo orario originale dopo che il tempo è arrivato a zero. Come un ciclo infinito. Ecco il codice che ho finora (ci sono 3 timer in totale):Come posso consentire al mio CountDownTimer di reimpostarsi al termine del conto alla rovescia?

package com.android.countdown; 


import android.app.Activity; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.View.OnClickListener; 

public class countdown extends Activity { 


    public String formatTime(long millis) { 
      String output = "00:00"; 
      long seconds = millis/1000; 
      long minutes = seconds/60; 

      seconds = seconds % 60; 
      minutes = minutes % 60; 

      String secondsD = String.valueOf(seconds); 
      String minutesD = String.valueOf(minutes); 

      if (seconds < 10) 
      secondsD = "0" + seconds; 
      if (minutes < 10) 
      minutesD = "0" + minutes; 

      output = minutesD + " : " + secondsD; 
      return output; 
     } 

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

//Declare Start/Stop button 
Button btnstart = (Button)findViewById(R.id.btnstart); 
Button btnstop = (Button)findViewById(R.id.btnstop); 

//Declare Text fields to show time left 
final TextView mCounter1TextField=(TextView)findViewById(R.id.counter1); 
final TextView mCounter2TextField = (TextView)findViewById(R.id.counter2); 
final TextView mCounter3TextField=(TextView)findViewById(R.id.counter3); 



//Counter 1 
final CountDownTimer Counter1 = new CountDownTimer(120000 , 1000) { 
public void onTick(long millisUntilFinished) { 
    mCounter1TextField.setText("Seconds left: " + formatTime(millisUntilFinished)); 
} 

public void onFinish() { 
    mCounter1TextField.setText("Finished!"); 
} 
}; 

//Counter 2 
final CountDownTimer Counter2 = new CountDownTimer(80000 , 1000) { 
public void onTick(long millisUntilFinished) { 
    mCounter2TextField.setText("Seconds left: " + formatTime(millisUntilFinished)); 
} 

public void onFinish() { 
    mCounter2TextField.setText("Finished!"); 
} 
}; 

//Counter 3 
final CountDownTimer Counter3 = new CountDownTimer(10000 , 1000) { 
    public void onTick(long millisUntilFinished) { 
     mCounter3TextField.setText("Seconds left: " + formatTime(millisUntilFinished)); 
    } 

    public void onFinish() { 
     mCounter3TextField.setText("Finished!"); 
    } 
    }; 


//Start Button 
btnstart.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
    Counter1.start(); 
    Counter2.start(); 
    Counter3.start(); 
    } 
}); 

//Stop Button 
btnstop.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
    Counter1.cancel(); 
    Counter2.cancel(); 
    Counter3.cancel(); 
    } 
}); 
} 
} 

Non riesco a capire cosa mettere dentro OnFinish()

risposta

6

Mettere il CounterX.start() nel rispettivo onFinish()

//Counter 1 
final CountDownTimer Counter1 = new CountDownTimer(120000 , 1000) { 
public void onTick(long millisUntilFinished) { 
     mCounter1TextField.setText("Seconds left: " + formatTime(millisUntilFinished)); 
} 

public void onFinish() { 
    mCounter1TextField.setText("Finished!"); 
    Counter1.start(); 
} 
}; 
+0

// EDIT \\ Ho funzionato. Si scopre che il 'finale' stava rovinando tutto. Dovevo dichiarare "CountDownTimer counter"; in cima per sbarazzarsi di 'finale' dopo che ha funzionato. – MJ93

+0

^ecco perché Counter1.start() non funzionava prima per me. Grazie per il tuo contributo, però, non avrei trovato la soluzione senza di esso – MJ93

+0

Felice di aiutare :) Ho trascurato anche la finale, la variabile finale può essere assegnata solo una volta, quindi non è affatto necessaria qui. – SteD

Problemi correlati