0

我在我的應用程序(twitter類應用程序)中實現了圖像(從遠程服務器)的延遲加載,並且將圖像加載到精確的imageView中工作得很好。但是,只有在向下滾動ListView並從遠程服務器(我通過在適配器「getView」代碼中執行asyntask獲取圖像)獲取圖像後,纔會調用適配器的「getView」部分。看到正在加載的圖像有相當數量的延遲。一旦圖像加載並存儲在內存緩存中,滾動向上或向下滾動就沒有問題了。唯一的問題是圖像加載第一次加載緩慢在LIstView中加載非常緩慢的圖像

所以有一種方式來糾正它的方式,當我向下滾動時,我應該能夠獲得圖像位圖和設置位圖時我向下滾動。我希望它完全像Twitter應用程序,在加載個人資料照片時看不到延遲。

TIA

回答

0

嗯,你的做法是不正確你必須向他們展示之前,所有圖像獲取爲得到視圖稱爲每次滾動列表,以便您的每一次服務被調用,並獲取無。列表可以在屏幕上顯示的圖像(每次說4-5)。

你需要做的是: - 1)獲取所有圖像。 2)當你獲取的所有圖像設置適配器的ListView,你會在你的列表中的所有圖像,無需等待,你已經下載的圖像,

但是,這不是懶加載 - 延遲加載意味着用戶如果他不滾動,那麼一次只能看到圖像的一部分,沒有意義從服務中下載圖像。

希望如果你調用在getView()方法的web服務,將有助於

+1

感謝您的回覆。我的應用程序就像一個twitter應用程序,我可以抓取10個提要,並在用戶向下滾動時繼續提取。所以我只會在滾動 – Jagadeesh

+0

時得到圖片Url,如果你一部分地抓取圖片,你不能忽略圖片的下載時間,這是造成getview延遲的原因。在將它們傳遞給適配器之前,您必須先獲取所有圖像。 –

+0

不完全是,您也可以加載位置+ 10圖像並緩存它們,以便向下滾動將顯示這些圖像,同時還會導致圖像位置+ 10下的新webservice調用。檢索所有圖像在很多情況下效率都不高,比如在Twitter中,列表幾乎是無窮無盡的。看到我的答案。 – NickL

0

,它會被稱爲每次上下滾動時間。由於getView方法是針對屏幕上可見的行調用的。

你可以做的是將圖像加載到HashMap<int, Object>,其中int ==在listview中的位置,object是圖像。在getview中,你可以檢查位置+(1 - > 10)是否已經被加載,如果沒有,在某種後臺任務中從web服務中檢索它們。 加載hashmap中的圖像,並使getView()方法使用這些圖像。不是從web服務直接檢索的圖像。否則,你確實需要等待它們被檢索。這種方式也可以將圖像緩存在hashmap中,而不是在上下滾動時反覆檢索相同的圖像。

當然,已經有人制作了這樣的適配器,只是通過在這裏搜索它,我發現了this SO問題,其答案指的是CommonsWare endless adapter