這是一種非常常見的情況:在必須從Internet下載的ListView中顯示圖像。Android - 將圖像延遲加載到ListView中的問題
現在我有一個ArrayAdapter的自定義子類,它用於ListView。在ArrayAdapter的getView()實現中,我生成了一個單獨的線程來加載圖像。加載完成後,它會查找合適的ImageView並使用ImageView.setImageDrawable()設置圖像。所以我使用的解決方案有點類似於這個:Lazy load of images in ListView
我遇到的問題是,只要我調用ImageView上的setImageDrawable(),ListView以某種方式刷新所有當前可見行列表!這導致一種無限循環的:
- getView()被調用
- 線程派生加載圖像
- 圖像被加載; setImageDrawable()調用ImageView的
- ListView控件將它拾起出於某種原因,並刷新自身
- 對於ListView刷新,getView()被調用每個可見行,讓我們回到步驟1,整個事情重複自己
因此,據我所見,解決方案中提出的「Android - 我如何在ListView中執行延遲加載的圖像」(請參閱上面的鏈接)根本不起作用。它可能看起來像它,但它會運行得非常慢,因爲在後臺,它會不斷重新加載當前可見的行。
有沒有人遇到過和/或有解決方案嗎?
是的我正在使用地圖來緩存圖像。但是,這並不重要,因爲我最終仍然調用setImageDrawable(),它再次觸發刷新。如果我能以某種方式禁用refesh它會解決我的問題。 我不使用SoftReferences(但我會),但這只是一個內存優化,這不能解決無限循環 – 2009-09-11 09:00:53
好點我誤解了你的意思是'線程被派生到*加載*圖像' 。我會重寫我的回答 – Will 2009-09-11 09:03:58
感謝您的快速回復:)當您不重複使用視圖來顯示像我一樣的行時,您現在描述的內容確實解決了問題。重用行我的意思是使用getView()給出的「convertView」參數。在重新使用行視圖時,你是否知道這個解決方案? (因爲在這種情況下,你必須每次都調用setImageDrawable()) – 2009-09-11 09:25:07