大家好
我要新建一个线程,然后每隔1秒来显示 基数+1,显示这个线程的运行
只是一个简单的实验
可是试了很多次,线程里 要给 EditText赋值没有问题,如果一赋值,就会报错
请问这是什么原因呢?   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btn1 = (Button)findViewById(R.id.button1);
        et1 = (EditText)findViewById(R.id.editText1);
        tv1 = (TextView)findViewById(R.id.textView1);           
        thread = new Thread(new Runnable()
{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<1000;i++)
{
str = str + i;
//写在这里运行会出错
//et1.setText(String.valueOf(str));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});        
        thread.start();
        
        btn1.setOnClickListener(new OnClickListener()
        {
@Override
public void onClick(View v) {
//用一个按钮点击可以看到 et1的内容随时在变化。我其实想让他自己变化。
et1.setText(String.valueOf(str));
}
        
        }
        );
    } 

解决方案 »

  1.   

    线程好像是一个单独的空间,似乎不能给Actity中的控件赋值,我原来想在线程中直接弹出个AlertDialog都不行。
    顺便问下其他高手有知道怎么在线程中操作控件或实现AlertDialog吗
      

  2.   

    可是它为什么可以对progresrbar进行操作呢
      

  3.   

    在线程中对界面进行更新操作可以使用handler,代码如下:
         indicate.post(new Runnable(){ public void run() {
    // TODO Auto-generated method stub
             et1.setText(String.valueOf(str));
    }});其中indicate是一个handler,可以这样初始化,Handler indicate = new Handler();
      

  4.   

    启动一个线程其实是Activity启动的,可以这样理解,启动的新线程是Activity的一个子线程,子线程是不能直接操作父线程的,所以如果想在子线程中(启动的新线程)跟父线程(Activity)进行数据交互,则必须有一套规则,这个规则就是使用handler进行协商。