2011-07-08 18 views
2

私はtextviewを使用して文字を表示したいと思います。の後にの文字がテキストビューに表示されるはずです。時間遅延のあるテキストビューでcharectersを表示する - android

私は次のコードを使用

....

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) {} 
    } 

ログイン猫の結果: android.view.ViewRoot $ CalledFromWrongThreadException:その景色に触れることができるビュー階層を作成しただけ元のスレッド。
解決策はありますか?

答えて

2

あなたが他のスレッドからUIコントロールを変更することはできません。次の方法でコードを更新してください。

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

詳細な回答ありがとうございます。 – vnshetty

2

UIの更新はスレッドセーフではないため、スレッドのテキストビューを更新することはできません。

使用この

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(); 
関連する問題