Chronographe TextView Android

Pour ma application Android, il y a une minuterie qui mesure combien de temps s'est écoulé. Toujours 100 millisecondes, je met à jour mon TextView avec un texte comme "Score: 10 Time: 100.10 secondes". Mais, je trouve les mises à jour TextView uniquement les premières fois. L'application est encore très réactive, mais l'étiquette ne sera pas mise à jour. J'ai essayé d'appeler .invalidate (), mais cela ne fonctionne toujours pas. Je ne sais pas s'il existe un moyen de résoudre ce problème, ou un meilleur widget à utiliser.

Voici un exemple de mon code:

  • Comment convertir `content: // media / external / images / media / Y` vers` file: /// storage / sdcard0 / Pictures / X.jpg` dans Android?
  • Comment effacer les données d'une matrice JSON
  • Attendez un fil avant de continuer sur Android
  • Button ClickLIstener ne fonctionne-t-il pas dans le jeu LibGdx?
  • Comment créer votre propre bibliothèque pour le développement Android à utiliser dans tous les programmes que vous écrivez?
  • Erreurs de mise à jour de l'application cordova
  • float seconds; java.util.Timer gametimer; void updatecount() { TextView t = (TextView)findViewById(R.id.topscore); t.setText("Score: 10 - Time: "+seconds+" seconds"); t.postInvalidate(); } public void onCreate(Bundle sis) { ... Load the UI, etc... gametimer.schedule(new TimerTask() { public void run() { seconds+=0.1; updatecount(); } }, 100, 100); } 

  • Développement Android: Visual Studio + Java. Est-il possible (vaut la peine d'essayer)?
  • Comment Port AsyncTask d'Android à Java?
  • Essayer de construire Android Emulator avec ionic fail .. "Classe introuvable: javac1.8"
  • Android Studio n'a pas pu trouver une version qui correspond à com.android.support:appcompat-v7:+
  • Les objets personnalisés sont-ils passés par valeur ou passés par référence dans les fragments et les activités?
  • Android parse String to Date - caractère de modèle inconnu 'X'
  • 4 Solutions collect form web for “Chronographe TextView Android”

    La solution générale consiste à utiliser android.os.Handler qui s'exécute dans le thread UI. Il ne fait que des rappels instantanés, donc vous devez le déclencher à chaque fois que votre rappel est appelé. Mais il est assez facile à utiliser. Une publication sur ce sujet a été écrite il y a quelques années:

    http://android-developers.blogspot.com/2007/11/stitch-in-time.html

    Ce que je pense, c'est que vous tombez du fil UI. Il existe un seul thread "Looper" qui gère toutes les mises à jour de l'écran. Si vous essayez d'appeler "invalidate ()" et que vous n'êtes pas sur ce fil, rien ne se produira.

    Essayez d'utiliser "postInvalidate ()" sur votre vue à la place. Il vous permettra de mettre à jour une vue lorsque vous n'êtes pas dans le thread UI actuel.

    Plus d'infos ici

    Utilisez le code ci-dessous pour définir l'heure sur TextView

     public class MyCountDownTimer extends CountDownTimer { public MyCountDownTimer(long startTime, long interval) { super(startTime, interval); } @Override public void onFinish() { ExamActivity.this.submitresult(); } @Override public void onTick(long millisUntilFinished) { long millis = millisUntilFinished; int seconds = (int) (millis / 1000) % 60; int minutes = (int) ((millis / (1000 * 60)) % 60); int hours = (int) ((millis / (1000 * 60`enter code here` * 60)) % 24); String ms = String .format("%02d:%02d:%02d", hours, minutes, seconds); txtimedisplay.setText(ms); } } 

    Il existe une autre façon de changer de texte chaque seconde; Ceci est ValueAnimator . Voici ma solution:

      long startTime = System.currentTimeMillis(); ValueAnimator animator = new ValueAnimator(); animator.setObjectValues(0, 1000); animator.setDuration(1000); animator.setRepeatCount(ValueAnimator.INFINITE); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { long currentTime = System.currentTimeMillis(); String text = TimeFormatUtils.formatTime(startTime - currentTime); yourTextView.setText(text); } @Override public void onAnimationRepeat(Animator animation) { long currentTime = System.currentTimeMillis(); String text = TimeFormatUtils.formatTime(startTime - currentTime); yourTextView.setText(text); } }); animator.start(); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.