2011-07-08 4 views
2

Je veux afficher des lettres en utilisant textview. et la lettre doit s'afficher dans la vue texte après un certain intervalle de temps.Afficher les caractères dans la vue texte avec délai - android

i utilisé le code suivant ....

String a="Apple"; 
String b=""; 
....... 
....... 


public void run() { 

    for (int i = 0; i < 5; i++) { 
     b=b+""+a.charAt(i); 
     mTextView.setText(b); //Problem here 
     Log.d("Letters",""+b); 
      try { 
        sleep(2000); 
      } catch (InterruptedException e) {} 
    } 

Log cat Résultat: android.view.ViewRoot $ CalledFromWrongThreadException: Seul le thread d'origine qui a créé une hiérarchie de vue peut toucher son point de vue.
Une solution?

Répondre

2

Vous ne pouvez pas modifier contrôles d'interface utilisateur avec d'autres threads. Mettez à jour votre code d'une manière suivante:

public void run() { 

    for (int i = 0; i < 5; i++) { 
     b=b+""+a.charAt(i); 

     //one of the ways to update UI controls from non-UI thread. 
     runOnUiThread(new Runnable() 
     {    
      @Override 
      public void run() 
      { 
       mTextView.setText(b); //no problems here :)     
      } 
     }); 

     Log.d("Letters",""+b); 
      try { 
        sleep(2000); 
      } catch (InterruptedException e) {} 
    } 
} 
+0

merci pour la réponse détaillée .. – vnshetty

2

Vous ne pouvez pas mettre à jour la vue texte dans le fil de discussion car la mise à jour de l'interface utilisateur n'est pas sécurisée pour les threads.

utilisent ce

public void run() { 

     for (int i = 0; i < 5; i++) { 
      b=b+""+a.charAt(i); 

      Log.d("Letters",""+b); 
       try { 
         sleep(2000); 
         handler.post(updateMessgae) 
       } catch (InterruptedException e) {} 
     } 

private final Runnable updateMessgae= new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
      Log.d("Letters",""+b); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    private final Handler handler = new Handler(); 
Questions connexes