我想知道如何在线程中创建TextView:
Thread t = new thread() {
public void run() {
for(int i = 0; i < 63; i++) {
TextView tv = new TextView();
tv.setText("What to do");
}
}
}
t.start();
我不明白该怎么做是假设在TextView的构造方法中?
答案 0 :(得分:3)
要回答您的问题:要创建TextView
,您必须为其提供Context
。 Activity
和Application
都延伸Context
,并且最常用于需要Context
的地方。在您的情况下,您应该使用创建的TextView
将显示的活动。因此,要修改您的代码:
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();
}
}
这很重要,即使你没有问过它:TextView
是一个UI控件。在UI线程上创建UI控件是合法的。在不同的线程中创建它可能会导致各种麻烦。从不同的线程执行此操作的一种方法是使用Activity.runOnUiThread()
方法:
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 :(得分: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();
您必须传递Application Context以创建视图,您只能修改UI线程上的UI。
答案 2 :(得分:0)
此外,如果您的主题不在活动类中,因此您可以调用runOnUiThread
活动的方法,则可以使用handler。您可以在活动的主线程中创建一个处理程序对象,并将其作为参数传递给所需的runnable对象。然后在runnable代码中,您可以使用处理程序的post(Runnable r)
方法从线程更新用户界面而不会出现任何问题。