2016-08-22 2 views
1

Je souhaite utiliser un compte à rebours mais j'ai un problème. Si je le démarre et puis appuyez sur un bouton Retour (changez le cycle de vie à onStop) et revenez à l'activité - je ne peux pas voir les valeurs de minuterie dans TextView. Mais dans Logcat je vois que la minuterie fonctionne.Comment mettre à jour TextView avec CountdownTimer onResume?

Question: comment mettre à jour TextView après le retour sur l'activité (onResume)

UPDATE. Même si je ne vais pas fermer l'activité ce code fonctionne comme il se doit - bien. Mais si j'appuie sur le bouton retour, il n'y a pas de valeurs dans TextView. Le code de la méthode de minuterie (cette méthode est appelée à partir onCreate):

timer = new CountDownTimer(rest + 1000, 1000) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       secondsUntilFinish = Math.round(millisUntilFinished/1000); 
       String minutes = String.format("%02d",TimeUnit.SECONDS.toMinutes(secondsUntilFinish)); 
       String seconds = String.format("%02d",TimeUnit.SECONDS.toSeconds(secondsUntilFinish) - TimeUnit.MINUTES.toSeconds(TimeUnit.SECONDS.toMinutes(secondsUntilFinish))); 
       tvRoutineTimer.setText(getResources().getString(R.string.exercise_rest_timer, minutes, seconds)); 
       Log.d(LOG_TAG, "onTick = " + getResources().getString(R.string.exercise_rest_timer, minutes, seconds)); 
      } 

      @Override 
      public void onFinish() { 
       tvRoutineProgress.setText(getString(R.string.routine_progress, currentStep, totalSteps)); 
       tvRoutineTimer.setText(getString(R.string.exercise_rest_timer, "00", "00")); 
       notificationAfterRest(); 
       btnExerciseDone.setText(getString(R.string.button_exercise_done)); 
       btnExerciseDone.setEnabled(true); 
       tvExercisePlaceholder.setText(getString(R.string.exercise_current_title)); 
      } 
     }.start(); 
+0

Ce sera beaucoup plus facile d'aider si vous postez une partie de votre code. – Pztar

+0

@Pztar, terminé. dites si vous avez besoin de voir plus –

+0

Que voyez-vous sur votre 'TextView'? Les anciennes valeurs ou rien du tout? – Pztar

Répondre

-1

Vous devez mettre à jour votre TextView du thread d'interface utilisateur. Mettez à jour votre TextView comme ceci:

runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       tvRoutineTimer.setText(getResources().getString(R.string.exercise_rest_timer, minutes, seconds)); 
     }); 

Placez le runOnUiThread à l'intérieur du onTick()

+0

Mais si j'ai besoin d'afficher des valeurs toutes les secondes, est-il correct d'appeler la méthode 'runOnUiThread' si souvent? –

+0

Oui, tout ce que vous faites est de mettre à jour l'interface utilisateur. 'runOnUiThread' est la réponse rapide courte. Utiliser un 'Handler' avec un' Runnable' serait mieux. – Pztar

+0

pls vérifier après la mise à jour. Au 1er pic. la minuterie fonctionne bien, au deuxième affichage seulement dans Logcat mais rien dans l'interface utilisateur. La méthode runOnUiThread() n'aide pas. *** Dans logcat "l'activité d'exercice onStart() blah blah" montre après le retour à l'activité. Comme vous pouvez le mentionner - il saute instantanément à onFinish() dans CountDownTimer –