有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在线程中创建TextView?

我想知道如何在线程内创建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) 个答案

  1. # 1 楼答案

    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();
        }
      }
      

    免责声明:尽管我修复了上面代码中的一些错误,但我没有测试它。仍然可能有错误

  2. # 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

  3. # 3 楼答案

    另外,如果线程不在activity类中,因此可以调用runOnUiThread活动的方法,则可以使用handler。在活动的主线程中创建处理程序对象,并将其作为参数传递给所需的可运行对象。然后,在可运行代码中,可以使用处理程序的post(Runnable r)方法从线程更新用户界面,而不会出现任何问题