在某个活动中,有一个名为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");

使用runOnUiThreadHandler
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);

07-24 09:45