在某个活动中,有一个名为timeText的TextView
变量,在打开活动后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
并再次尝试。但是,现在,启动此活动时,应用程序崩溃。
最佳答案
无法从非ui线程更新ui
timeText.setText("3");
使用
runOnUiThread
或Handler
。runOnUiThread(new Runnable() {
public void run() {
timeText.setText("3");
}
});
您可以将
timeText
声明为实例变量,并且不需要final
修饰符。TextView timerText;
protectected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
timeText = (TextView) findViewById(R.id.tvTimeText);