2014-01-07 51 views
1

在某个活动中有一个名为timeText的变量TextView,该活动在打开活动后经过3秒后需要更改。如何在不导致应用程序崩溃的情况下更新TextView?

这是我写的代码:

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

尝试使用runOnUiThread。这里是一个例子: http://stackoverflow.com/questions/11140285/how-to-use-runonuithread – mayooran

回答

3

无法从非UI更新UI thrad

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); 
2

使用一个处理器和一个可运行:

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

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