2013-03-11 3 views
-1

Добрый день,Обновление Android UI из другой темы

Я хочу обновить кнопку изображения в своем интерфейсе из другой темы. ниже мой код, который я запускаю в своих сетевых потоках onCreate().

new Thread(new Runnable() { 
     public void run() { 

      ImageButton btn = (ImageButton) findViewById(R.id.connected_icon); 
      if (netConnection.IsConnected()) { 
       // Change icon to green 
       btn.setImageResource(R.drawable.green_small); 
      } else { 
       // Change icon to red 
       btn.setImageResource(R.drawable.red_small); 
      } 
      try { 
       // Sleep for a second before re_checking. 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
    }).start(); 

Нет, когда я запускаю это, я ген ИНТ ошибки он LogCat говоря я не могу обновить пользовательский интерфейс от annother потока.

Я помню, как читал soem, где однажды это происходит так, что вы не получите несколько потоков, обновляющих один и тот же объект интерфейса одновременно. Но как я могу это достичь. я уверен, что есть работа вокруг?

Благодаря

+0

Это дубликат. Таких вопросов много. Используйте поиск. – Shade

ответ

1

UI Elements следует обновить только из потока пользовательского интерфейса. Используйте задачу async для создания фонового слова и измените пользовательский интерфейс в onPostExecute, который работает в потоке пользовательского интерфейса

4

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

final Handler mHandler = new Handler() { 

    public void handleMessage(Message msg) { 

    } 
}; 

И отправлять сообщения UIThread с

Message msg = new Message(); 
//TODO: add stuff to message 
mHandler.sendMessage(msg); 

внутри Thread.

Это или использовать AsyncTask вместо этого и делать обновления внутри предварительно, почтовых или progressUpdate методов

Смежные вопросы