2011-07-04 19 views

答えて

3
  1. あなたの質問に答えるために:あなたはContextとそれを供給しなければならないTextViewを作成します。 ActivityおよびApplicationは両方ともContextを拡張し、Contextが必要な場合に最もよく使用されます。 。

    class MyActivity extends Activity { 
        public void someMethod() { 
        Thread t = new Thread() { 
         @override public void run() { 
         for(int i = 0; i < 63; i++) { 
          TextView tv = new TextView(MyActivity.this); 
          tv.setText("What to do"); 
         } 
         } 
        }; 
        t.start(); 
        } 
    } 
    
  2. これは、あなたがそれについて尋ねていなかったにもかかわらず、重要です::TextViewがあるあなたのケースでは、作成したTextViewがあなたのコードを変更するために、そうで表示されますwhcih活動を使用する必要がありますUIコントロール。 UIスレッドでUIコントロールを作成することは、合法です。別のスレッドで作成すると、さまざまな問題が発生する可能性があります。私は上記のコードでは、いくつかのミスを修正していますが、私はそれをテストしていない:

    class MyActivity extends Activity { 
        public void someMethod() { 
        Thread t = new Thread() { 
         @override public void run() { 
         for(int i = 0; i < 63; i++) { 
          runOnUiThread(new Runnable() { 
          void run() { 
           TextView tv = new TextView(MyActivity.this); 
           tv.setText("What to do"); 
          } 
          }); 
         } 
         } 
        }; 
        t.start(); 
        } 
    } 
    

免責事項:別のスレッドからこれを行う方法の1つは、Activity.runOnUiThread()メソッドを使用することです。それでもエラーが発生する可能性があります。

+0

thxです。私はそれが動作するかどうかを確認するためにそれを試しに行きます – camelCaseD

+0

この例では動作します – camelCaseD

2

Thread t = new thread(new Runnable() 
{ 
public void run() 
{ 
    for(int i = 0; i < 63; i++) 
    { 
     runOnUiThread(new Runnable() 
     { 
     public void run() 
     { 
      TextView tv = new TextView(getApplicationContext()); 
      tv.setText("What to do"); 
     } 
     }); 
    } 
} 
}); 
t.start(); 

あなたはビューを作成し、あなただけのUIスレッド上でUIを変更することができApplication Contextを渡す必要があり、これを試してみてください。

+0

thx答えは – camelCaseD

0

スレッドがアクティビティクラスを超えているため、runOnUiThreadアクティビティのメソッドを呼び出すことができる場合は、handlerを使用できます。アクティビティのメインスレッドにハンドラオブジェクトを作成し、必要な実行可能オブジェクトに引数として渡します。次に、実行可能コードにハンドラのpost(Runnable r)メソッドを使用して、スレッドからユーザーインターフェイスを問題なく更新できます。

関連する問題