Domanda

im torna a fare un'altra domanda :)

In un'app che sto facendo, ho bisogno di un selettore per scegliere uno dei 4 diversi timer di conto alla rovescia, ad esempio round1, round2, ecc.

Ma ho 2 problemi con la stessa fonte. Usando l'impensazione predefinita del contoDownTimer che non coinvolge la denominazione rotonda1, ma in esecuzione come contoDownTowner dritto, posso cancellarlo in onpausa usando coutdowntimer.Cancel ();

Ma dopo averlo nominato Round1 non posso più farla mettere in pausa e il Round1.Cancel (); si presenta come indefinito.

Ho trascorso la maggior parte di ieri e attraverso le 3 del mattino cercando di trovare una soluzione e pensavo di averlo fatto rendendo i miei timer finali ma non funzionava ancora.

Dopo aver pensato di più che ho rilanciato una volta che Ive ha risolto questo problema, dovrò implementare una dichiarazione se nella mia onpessa che preferirei non fare in uno sforzo per mantenere pulito il mio codice.

Così c'è un modo per implementare un comando Annulla universale per annullare la funzione CountDownTowner root indipendentemente dal nome effettivo che è in esecuzione sotto. Ad esempio

public void canceltimers(){
//if round1,2,3,4 is runnng, cancel the main countdowntimer thread altogether. 
countdowntimer.Cancel();
}
.

Qualsiasi aiuto è apprezzato ed ecco il mio codice temporale corrente.

CountDownTimer round1 = new CountDownTimer(30000, 1000) {
        public void onTick(long millisUntilFinished) {
            textview4.setText("" + millisUntilFinished / 1000);
        }

        public void onFinish() {
          endsequence();
        }
          };

         CountDownTimer round2 = new CountDownTimer(20000, 1000) {

         public void onTick(long millisUntilFinished) {
         textview4.setText("" + millisUntilFinished / 1000);
              }

         public void onFinish() {
         endsequence();
              }
                };
   // round1.start();
.

Ive non ha implementato le mie dichiarazioni se le dichiarazioni per il livello selezionare ancora ma sarà simile a questo

 if (level == 1){
 round1.start();}
 if (level == 2){
 round2.start();}
.

Finora ho provato a stabilirlo come finale, senza gioia. Ho provato

round1.cancel();
.

senza gioia. Inoltre ogni implementazione del contoDownTimer posso pensare o trovare.

Ora come una richiesta, non è così sorprendente come fare il senso del codice come molti di voi ragazzi, quindi se potessi provare a dare un esempio dell'attuazione che sarebbe apprezzato, grazie per guardare e grazie per il tuo tempo e aiuto < / P >.

Phil

È stato utile?

Soluzione

crea un singolo timer.Aggiungi più timertsks a questo timer.Definisci il contoDown_time.

Timer mTimer = new Timer();

mTimer.schedule(new TimerTask() {
                @Override
                public void run() {
                   //execute code when the COUNTDOWN_TIME has ran out.
                }
            }, COUNTDOWN_TIME);
        }

//cancels all sceduled/running TimerTasks
mTimer.cancel();
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top