美好的一天,
我想从另一个线程更新我的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说我无法从另一个线程更新UI。
我记得曾经读过这样的情况,所以你不会让多个线程一次更新同一个UI对象。但我怎样才能做到这一点。我相信有一个解决方法吗?
由于
答案 0 :(得分: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,并从pre,post或progressUpdate方法内部进行更新
答案 1 :(得分:1)
UI元素只能从UI线程更新。使用异步任务来执行背景词,并修改在UI线程上运行的onPostExecute中的UI