我已经实现了一个基于3个条件更改图像的ImageButton
,其中一个条件设置如下:
if (Local().equals(Remote)) {
ib.setImageResource(R.drawable.sync_green);
} else {
ib.setImageResource(R.drawable.sync_red);
}
这样可行,但几秒钟后,应用程序崩溃并显示以下日志:
06-20 11:58:27.734: E/AndroidRuntime(2278): FATAL EXCEPTION: Thread-160
06-20 11:58:27.734: E/AndroidRuntime(2278): Process: com.twostarii.asyncdownload, PID: 2278
06-20 11:58:27.734: E/AndroidRuntime(2278): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
06-20 11:58:27.734: E/AndroidRuntime(2278): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6247)
06-20 11:58:27.734: E/AndroidRuntime(2278): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:902)
06-20 11:58:27.734: E/AndroidRuntime(2278): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4637)
06-20 11:58:27.734: E/AndroidRuntime(2278): at android.view.View.invalidateInternal(View.java:11690)
06-20 11:58:27.734: E/AndroidRuntime(2278): at android.view.View.invalidate(View.java:11654)
06-20 11:58:27.734: E/AndroidRuntime(2278): at android.view.View.invalidate(View.java:11638)
06-20 11:58:27.734: E/AndroidRuntime(2278): at android.widget.ImageView.setImageResource(ImageView.java:402)
06-20 11:58:27.734: E/AndroidRuntime(2278): at com.twostarii.asyncdownload.AndroidDownloadFileByProgressBarActivity$1.run(AndroidDownloadFileByProgressBarActivity.java:172)
答案 0 :(得分:2)
您无法更改drawable,因为您没有在主UI线程上。
尝试做这样的事情:
runOnUiThread(new Runnable() {
@Override
public void run() {
// code here to run on UI Thread
}
});
答案 1 :(得分:0)
您正在尝试从您创建的新线程修改某些UI元素。你不能这样做。只有主线程可以修改UI元素。
您可以采取以下两项措施来解决问题:
1。)使用runOnUiThread方法
2.)使用AsyncTask API
就个人而言,我建议使用AsyncTask。您可以在Google上查看如何使用它