基于If条件的ImageButton

时间:2015-06-20 10:07:01

标签: android

我已经实现了一个基于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)

2 个答案:

答案 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上查看如何使用它