2012-04-04 2 views
0

Угадайте, что у меня есть TextView, который я хочу обновить в некоторых ситуациях. Я хочу иметь поток, который каждые две или две секунды проверяет обстоятельства и обновляет текст TextView, если это необходимо. Любая идея?Android: периодически обновлять пользовательский интерфейс из потока

+3

Поток может быть излишним, если нет какой-то операции блокировки, связанные с ним. Обработчик в сочетании с 'postDelayed (runnable, 2000)' может быть подходящим для ваших нужд. http://developer.android.com/reference/android/os/Handler.html – DeeV

ответ

2

Вы можете использовать обработчик, в вашем GUI:

Handler hnd = new Handler() { 
    public void handleMessage(Message msg) { 
     if (msg.what == 101) { 
      //update textview 
     } 
    } 
} 

проход HND к вашей теме, и в вашей теме сделать:

Message m = new Message(); 
m.what = 101; 
hnd.sendMessage(m); 

это предполагает что в вашем отдельном потоке вы выполняете некоторую работу, требующую отчета в поток графического интерфейса пользователя, вы также можете отправлять текстовые сообщения

+0

В вашем ответе есть одна ВАЖНАЯ опечатка: метод должен быть handleMessage (без R). Я попытался отредактировать ваш ответ, но они отклонили изменения. Проверьте здесь http://developer.android.com/reference/android/os/Handler.html – fersarr

+0

@fersarr thanx исправил это – marcinj

1

Вы должны использовать обработчик для обновления вида из другого потока. С postDelayed вы можете установить задержку. см документ:

handler.postDelayed

3

я сделать что-то вроде этого:

public class MyClass { 
    private Handler hUpdate; 
    private Runnable rUpdate; 

    public MyClass() { // Constructor 
    hUpdate = new Handler(); 
    rUpdate = new Runnable() { 
     // Do your GUI updates here 
    }; 

    Thread tUpdate = new Thread() { 
     public void run() { 
     while(true) { 
      hUpdate.post(rUpdate); 
      sleep(500); 
     } 
     } 
    } 
    tUpdate.start(); 
    } 
} 
Смежные вопросы