Pause avec gestionnaire et postDelayed dans android
Je suis très nouveau pour android programmes, de sorte s'il vous plaît pardonnez mon noobie-ness. Je suis en train de créer un très simple activité qui aura un TextView dans le milieu de la Mise en page et venez passer à un autre texte toutes les deux secondes. Par exemple, le TextView va dire "texte1", pause pour un couple de secondes, puis dire "texte2, et de faire une pause à nouveau. Finalement, je veux ajouter des textes et de les avoir tout le cycle l'un après l'autre. Je sais que cela semble comme une simple chose, mais je suis surtout à essayer d'apprendre à propos des threads et des gestionnaires en ce moment. De toute façon, j'ai lu sur la façon dont nous devrions nous garder de longues choses du thread de l'INTERFACE utilisateur afin d'éviter une erreur j'ai donc pensé utiliser un gestionnaire de simplement basculer entre les 2 textes à l'écran. Malheureusement, je ne peux pas obtenir que cela fonctionne. Voici un code:
public class MainActivity extends Activity {
String[] myarray = {"text1" , "text2"};
int arraylength = myarray.length;
int count;
Handler handler = new Handler();
TextView mytexts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mytexts = (TextView)findViewById(R.id.my_texts);
mytexts.setText(myarray[0]);
Thread t = new Thread( new Runnable(){
public void run() {
for (int count = 0; count < arraylength; count++){
handler.postDelayed(new Runnable(){
public void run() {
mytexts.setText(myarray[1]);
}
}, 7000);
}
}
});
t.start();
}
}
De ce que je peux voir dans le logcat, le gestionnaire semble fonctionner postDelayed l'un après l'autre (dans mon code, il n'a PAS d'attendre 7 secondes avec la postDelay de faire un autre postDelayed). Aussi, je voudrais faire le 1 "mytexts.setText(montableau[1]);" être le même que le "compteur" dans la boucle de sorte qu'il peut être le même que celui des chaînes dans le tableau, mais qui me donne une erreur. J'ai été coincé sur cela pendant des heures et d'autres exemples que j'ai trouvé en ligne semble trop compliqué pour quelqu'un comme moi qui veut obtenir les bases vers le bas avant que je puisse aborder d'autres choses. L'aide à tout cela serait très apprécié. Merci.
source d'informationauteur John Octavious
Vous devez vous connecter pour publier un commentaire.
postDelayed
est non bloquant, ce serait ajouter à une file d'attente de je vais le faire plus tard. Donc, ce que vous êtes probablement voir tous les textes de mises à jour simultanées lors de la 7e à la seconde. Je dis cela parce que vous êtespostDelay
ing de laonCreate
méthode alors qu'en réalité, vous voulez probablement faire deonResume
ou mêmeonPostResume
.Aussi il n'y a pas de raison de créer un thread pour ajouter runnables à la poste de la file d'attente. Votre code devrait ressembler à ceci:
(Remarque le temps de retard multiplicateur)
C'est parce que votre boucle de réglage tous vos gestionnaires à courir après 7 secondes, pas 7 secondes après l'autre, mais, mais après 7 secondes à partir de maintenant. Vous pouvez ajouter dans le
postDelayed
méthode ou l'utilisation de lapostAtTime
méthode handler .Aussi, vous n'avez pas besoin de le faire dans un thread, vous pouvez vous débarrasser de cette complètement.