2015-06-20 85 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 。您可以在谷歌查詢有關如何使用它