2014-01-07 1 views
1

В определенной Деятельности есть переменная TextView с именем timeText, которая должна быть изменена через 3 секунды после открытия Activity.Как обновить 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

Try и использовать runOnUiThread. Вот пример: http://stackoverflow.com/questions/11140285/how-to-use-runonuithread – mayooran

ответ

3

Невозможно обновить пользовательский интерфейс от не пользовательского интерфейса thrad

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

Используйте обработчик и исполняемую:

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

Handler handler = new Handler(); 
handler.postDelayed(runnable , 3000); 
Смежные вопросы