2010-06-28 4 views
0

Mon activité a simple ligneMenu qui commencent un compteur ... le compteur est stocké dans un champ de l'activité le problème est avec le bouton « retour » après la fermeture de l'activité (bouton de retour), la minuterie (comme dans mon intention) continue, et en redémarrant l'activité se comporter correctement en reprenant la minuterie ... mais j'ai perdu la référence au compteur et donc je ne peux pas l'arrêter Des idées?Récupérer une référence à CountDownTimer après activuty Fermé

suit il y a une partie du code de la fonction booléenne onOptionsItemSelected (point MenuItem)

switch (item.getItemId()) { 
    case R.id.STARTSTOP: 
     running = !running; 
     if (!running) { 
      item.setTitle("START"); 
      if (counter!=null) { 
       counter.cancel(); 
       counter = null; 
      } 
     } 
     else { 
      item.setTitle("STOP"); 
      counter = new CountDownTimer(1000*60*20/*20min*/,1000){ 
       @Override 
       public void onFinish() { 
        TextView tv = (TextView) findViewById(R.id.counter); 
        tv.setText("done!"); 
       } 
       @Override 
       public void onTick(long millisUntilFinished) { 
        TextView tv = (TextView) findViewById(R.id.counter); 
        tv.setText(millisUntilFinished); 
        Log.d("XXXDEBUGXXX",millisUntilFinished); 
       } 
      }; 
      counter.start(); 
    } 

}

Répondre

0

Je vous suggère d'utiliser AlarmManager à la place.
Ou vous pouvez utiliser SharedPreferences pour stocker la valeur intermédiaire lue en onResume(..) pour redémarrer le temporisateur et enregistré dans onPause(..).

+0

dans votre solution (si je comprends bien) Je devrais arrêter le compteur, enregistrer dans les préférences l'heure atteinte, et à la reprise, prendre ce temps et commencer un autre compteur. mais ce n'est pas le comportement que je veux. Je veux que le compteur continue le compte à rebours (et il l'a fait) et puis pouvoir l'arrêter (c.-à-d., Trouver la référence) Je regarderai à AlarmManager si cela aide ... merci – user290302

+0

@ user290302 vous sauvez le atteint l'heure + l'horodatage actuel, puis soustraire le temps écoulé depuis le dernier arrêt de l'heure atteinte avant de commencer une nouvelle minuterie. – yanchenko

+0

oui, mais de cette manière, si le temporisateur expire entre temps (pendant la phase où l'activité n'est pas affichée) je n'aurais aucune notification vous avez raison: dans le code, il n'est pas présenté, mais il est prévu qu'à le timeout il met une notification dans la barre de notification ... :-D – user290302

Questions connexes