在某个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
并再次尝试。
但是,现在应用程序在此活动启动时崩溃。
答案 0 :(得分:3)
无法从非ui线程更新ui
timeText.setText("3");
使用runOnUiThread
或Handler
。
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);