0

我一直在尝试Runnable在我的应用程序中实现 a,所以我从一些简单的过程开始,但即使这样也不会在TextView. 令人惊讶的是,我已经覆盖了对象的run(),但它仍然没有显示。

package com.example.filer;
public class Filesearcher extends Activity implements Runnable {

TextView tvtis;
Thread tr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_filesearcher);
    tvtis = (TextView) findViewById(R.id.tvfirst);
    tr = new Thread();
    tr.start();
}

@Override
public void run() {
    // TODO Auto-generated method stub
    try {
        Thread.sleep(5000);
        tvtis.setText("Started");
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}
4

3 回答 3

1

改变

tr = new Thread();

tr = new Thread(this);
于 2013-09-29T18:38:46.550 回答
0

您不能从 UI 线程以外的线程更改 UI。意味着-您的线程可能工作正常,但tvis.setText()不能(从该线程内)。尝试一个简单的Log.d("tag", "does it work?")方法来查看您的线程是否运行。

于 2013-09-29T18:39:22.797 回答
0

把你的 Runnable 放在一个线程上:tr = new Thread(this);

从另一个切换到 UI 线程:

@Override
public void run() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(5000);
                tvtis.setText("started");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });

看看文档_runOnUiThread(Runnable)

于 2013-09-29T19:00:53.893 回答