2012-04-07 5 views
0

l'interface utilisateur est très simple, ayant seulement un bouton login et un TextView défilant dessus, quand j'appuie sur le bouton login, 100 lignes de messages vont ajouter au TextView, mais ils sont ajouté en même temps, et parce que j'ai besoin de faire avec les messages qui vont ajouter à la TextView, ce qui va coûter un peu de temps, parfois l'application ne ressemble à aucune réponse. J'espère que le message pourrait ajouter à la ligne TextView par ligne. IOW je veux que le TextView affiche la ligne ajoutée du message dans chaque boucle. comment puis-je réaliser cela? Voici le code principal qui a été simplifié:comment changer le contenu de TextView en temps réel

login.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     for(int i = 0; i < 100; i++) { 
      mTextView.append("test\n"); 
     } 
    } 
} 

Répondre

0
login.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     mTextView.setText(""); 
     for(int i = 0; i < 100; i++) { 
      mTextView.setText(mTextView.getText()+"test\n"); 
     } 
    } 
} 

Essayez ce code, il devrait fonctionner

+0

thx, mais il doest travailler pour moi :( – Searene

0

Utilisez ceci:

login.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

     mTextView.setText(""); 
if (!isStopped) { 

     Acitivut.this.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
     for(int i = 0; i < 100; i++) { 
      mTextView.append("test\n"); 
     } 
isStopped=true; 
     } 
     }); 
} 
     } 
    } 
+0

thx, mais où dois-je définir la variable isStopped? I essayé d'ajouter la ligne 'booléenne isStopped =' false' avant if (! IsStopped) { ', mais 'isStopped' ne peut pas être inspecté dans' new Runnable() {} 'parce que c'est dans une autre classe – Searene

+0

si ça marche bien alors laissez-le.j'ai ajouté cette variable si l'utilisateur clique deux fois en même temps sur le bouton puis l'empêche. –

+0

@MarkZar: veuillez faire votre logique pour cette condition –

0

Tout ce qui change élément interface utilisateur, doit fonctionner sur l'interface utilisateur fil. Puisque vous exécutez une boucle longue, votre application se bloque. Vous devez soit modifier la conception et éviter de mettre à jour l'interface utilisateur en boucle, soit utiliser background thread et ajouter le texte à StringBuilder. Lorsque la boucle est terminée, ajoutez le texte StringBuilder à mtextView.

Encore une fois, si votre StringBuilder contient du texte très volumineux, sa mise à jour vers l'interface utilisateur peut le geler à nouveau.

0
login.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
      i=0; 
      Thread thread=new Thread(new SleepThread()); 
      thread.start(); 
    } 
} 

private class SleepThread implements Runnable 
{ 
     public void run() 
     { 
       sleep(10); 
       handler.sendEmptyMessage(); 
     } 
} 

Handler handler=new Handler() 
{ 
    public void handleMessage(Message msg) 
    { 
     mTextView.append("test\n"); 
     i++; 
     if(i<100) 
     { 
       Thread thread=new Thread(new SleepThread()); 
       thread.start(); 
     } 
    } 
}