2013-03-11 94 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方法