2015-06-20 93 views
-4

我已经实现了ImageButton基于3个条件而变化的图像,条件之一是设置如下:的ImageButton根据if条件

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

这里后您的完整代码 –

+1

你不能改变的绘制,因为你不是在主UI线程作为logcat的上这里说明 - 创建一个视图可以分层原来的线程触及其观点。 –

回答

2

,因为你不能改变你的绘制不是在主UI线程。

尝试做这样的事情:

runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

       // code here to run on UI Thread 
      } 
     }); 
+0

谢谢马克 - 它完美的工作,我会读更多的 – TwoStarII

0

你在做什么是你想修改一些从您创建一个新线程的UI元素。你不能那样做。只有主线程才能修改UI元素。

这里有两件事情可以做,以解决您的问题:

1)使用runOnUiThread方法

2)使用的AsyncTask API

就个人而言,我推荐使用的AsyncTask 。您可以在谷歌查询有关如何使用它