-1

threadで始めactivityます。にコンストラクタがありtextviewますthreadsetText実行中の更新時にエラーはありませんtextview

しかし、threadパラメーターなしで新しいものを実行するsetTextView (TextView)setText()、エラーが発生します。

なぜこれが表示されるのですか?

編集:私のコード

package extthread;

import android.widget.TextView;

public class MyUpdateUIThread extends Thread {

private TextView textView1;

public MyUpdateUIThread(TextView textView1) {
super();
this.textView1 = textView1;
}

@Override
public void run() {
super.run();
textView1.setText("zzzzzzzzzzzzzz");
}

}

------------------------------
package testtest.test.run;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import extthread.MyUpdateUIThread;

public class Main extends Activity {
TextView textView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

textView = (TextView) this.findViewById(R.id.textView1);
Thread thread = new Thread(new MyUpdateUIThread(textView));
thread.start();

}
};
4

1 に答える 1

2

TextViewを次のように更新するには、Threadのrunメソッド内でrunOnUiThreadを使用します。

Your_Current_Activity.this.runOnUiThread(new Runnable() {
    public void run() {

             //update textview here
    }
});

編集 :

現在のコードのように、スレッドは別のクラスからのものです。runOnUiThread次に、スレッドでアクセスするには、メインアクティビティインスタンスをスレッドクラスに渡す必要がありMyUpdateUIThreadます。MyUpdateUIThreadクラスコンストラクタを次のように変更します。

private TextView textView1;
Activity activity;
public MyUpdateUIThread(TextView textView1,Activity activity) {
super();
this.textView1 = textView1;
this.activity=activity;
}

@Override
public void run() {
super.run();
activity.runOnUiThread(new Runnable() {
    public void run() {

       //update textview here
       textView1.setText("zzzzzzzzzzzzzz");
    }
});

}

MyUpdateUIThreadメインアクティビティで次のようにオブジェクトを作成します。

Thread thread = new Thread(new MyUpdateUIThread(textView,Main.this));
于 2013-01-14T08:59:45.720 に答える