如何在不导致应用程序崩溃的情况下更新TextView?

时间:2014-01-07 14:14:42

标签: android

在某个Activity中有一个名为timeText的TextView变量,需要在Activity打开3秒后更改。

这是我写的代码:

TextView timeText = (TextView) findViewById(R.id.tvTimeText);
Thread timer = new Thread() {
        public void run() {
            try {
                sleep(3000);
                timeText.setText("3");
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
};
timer.start();

然而,这给了我这个错误:“不能引用在不同方法中定义的内部类中的非最终变量timeText”

所以我将TextView的修饰符更改为final并再次尝试。 但是,现在应用程序在此活动启动时崩溃。

2 个答案:

答案 0 :(得分:3)

无法从非ui线程更新ui

 timeText.setText("3");

使用runOnUiThreadHandler

runOnUiThread(new Runnable() {

        public void run() {
            timeText.setText("3");

        }
    });

您可以将timeText声明为实例变量,但不需要final修饰符。

答案 1 :(得分:2)

使用处理程序和runnable:

final Runnable runnable = new Runnable() {
    public void run() {
        timeText.setText("3");        
    }
};

Handler handler = new Handler();
handler.postDelayed(runnable , 3000);