7 votes

Comment mettre à jour un TextView dans une activité constamment dans une boucle infinie ?

J'ai une activité qui a un TextView, et je veux mettre à jour le texte constamment

En Java, je pourrais simplement créer une boucle infinie de type "while" et définir le texte à chaque itération.

Mais lorsque j'essaie de le faire dans Android, un écran noir s'affiche, et l'activité n'est même pas chargée.

J'ai mis l'infini dans le onCreate méthode, c'est peut-être pour cela qu'il se bloque mais si c'est le cas, où dois-je le mettre ?

14voto

ρяσѕρєя K Points 51253

Utiliser Manipulateur et un thread/runnable séparé pour la mise à jour constante du TextView au lieu de la boucle While :

Handler handler=new Handler();
handler.post(new Runnable(){ 
    @Override
    public void run() {
        // upadte textView here
        handler.postDelayed(this,500); // set time here to refresh textView
    }
});

4voto

Ciro Santilli Points 3341

Exemple de fonctionnement minimal

Sur la base de https://stackoverflow.com/a/14295193/895245 :

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class Main extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final int i = 0;
        final TextView textView = new TextView(this);
        textView.setText(String.format("%d", i));
        setContentView(textView);
        final Handler handler = new Handler();
        class MyRunnable implements Runnable {
            private Handler handler;
            private int i;
            private TextView textView;
            public MyRunnable(Handler handler, int i, TextView textView) {
                this.handler = handler;
                this.i = i;
                this.textView = textView;
            }
            @Override
            public void run() {
                this.handler.postDelayed(this, 500);
                this.i++;
                this.textView.setText(String.format("%d", i));
            }
        }
        handler.post(new MyRunnable(handler, i, textView));
    }
}

Vous pouvez simplement copier-coller ceci dans l'activité principale générée par android create project [...] et vous verrez un compteur sur votre application.

Testé sur Android 22.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X