2013-03-11 96 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說我無法更新來自其他線程的用戶界面。

我記得在閱讀soem的時候,一旦出現這種情況,你就不會一次獲得更新同一個UI對象的多個線程。但我怎麼能做到這一點。我相信有一個工作?

謝謝

+0

這是一個重複內做了更新。有很多這樣的問題。使用搜索。 – Shade 2013-03-11 14:23:17

回答

1

UI元素只能從UI線程更新。使用異步任務來完成背景字,並修改在UI線程上運行的onPostExecute中的用戶界面

4

您無法直接從線程訪問UI組件。 做到這一點,正確的方法是通過創建一個處理程序

final Handler mHandler = new Handler() { 

    public void handleMessage(Message msg) { 

    } 
}; 

和發送消息到UIThread與

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

你的線程裏面。

這或使用的AsyncTask,而不是從前期,後期或progressUpdate方法