如何在线程中创建TextView?

时间:2011-07-04 16:29:37

标签: java android

我想知道如何在线程中创建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的构造方法中?

3 个答案:

答案 0 :(得分:3)

  1. 要回答您的问题:要创建TextView,您必须为其提供ContextActivityApplication都延伸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();
      }
    }
    
  2. 这很重要,即使你没有问过它: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();
      }
    }
    
  3. 免责声明:即使我修复了上述代码中的一些错误,我也没有对其进行测试。仍然可能存在错误。

答案 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)方法从线程更新用户界面而不会出现任何问题。