2011-10-11 102 views
1

我有一個通過重新設置列表視圖的適配器來刷新列表視圖的方法。設置時,適配器會爲每個列表項目下載縮略圖。Android:異步在一個單獨的線程中運行一個方法

我想在一個新的線程運行該方法被稱爲refreshListView(),使圖像得到異步下載,但我知道,我不能更新一個單獨的線程的用戶界面。

有什麼替代方法可以做到這一點?

在此先感謝。

回答

4

你可以使用的AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html)或裝載機(http://developer.android.com/guide/topics/fundamentals/loaders.html)。我建議使用加載程序,因爲它似乎總是更容易。這兩者都是針對這種類型的問題而設計的。

爲了使用上的任何目標平臺的裝載機小於3.0,請參考http://developer.android.com/sdk/compatibility-library.html

+0

裝載機是3.0+只有,因此它們在當前可用的電話上不可用。 –

+1

@PeterKnego不正確。 Android兼容性包讓每個人都能以一種非常簡單的方式訪問加載器:http://developer.android.com/sdk/compatibility-library.html –

+0

啊,很好。謝謝(你的)信息。 +1先回答。 –

0

嗯。如果我理解正確,在圖像下載完成之前,您不想使用新的適配器?適配器中的圖像下載代碼。根據不同的情況,一旦適配器的視圖被加載/顯示,您可能只能看到下載代碼。

我通常首先在後臺線程中下載圖像,並將它們緩存在(SoftReferences的)集合中。然後,我在加載時從該集合中讀取適配器。

+0

基本上,適配器被調用如下:「LazyAdapter lazyAdapter = new LazyAdapter(this,imagesListStringArray,listText1,listText2);」所以圖像通過一個字符串數組傳遞給適配器,在創建和設置此適配器之前填充該字符串 – EI756

+0

在上面的LazyAdapter構造函數中,是一個字符串數組imagesListListStringArray?每個字符串都是您想要下載的圖像的網址? – pumuckl

0

正如前面提到的,你可以使用的AsyncTask運行在另一個線程,一旦單獨的線程下載了縮略圖可以更新UI。根據您想要如何實現它,您還可以使用AsyncTask中的onProgressUpdate()方法下載縮略圖。否則使用onPostExecute來重置列表適配器。

2

這是整個代碼。

http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview/559781#559781

+0

我通過將清單中的targetSDKVersion設置爲「2」得到了它的工作,上面的代碼似乎將圖像加載到一個隊列中。這是加載圖像的最佳方式嗎?如果不將targetSDKversion設置爲2,則只顯示佔位符圖像,圖像似乎不會被下載 – EI756

相關問題