2012-04-10 24 views
2

我正在創建一個適配器,它將下劃線數據從Web服務加載下來,並且每次用戶向下滾動時都會加載更多數據並將其添加到該適配器後面的ArrayList中。這些數據包含圖片網址,然後我將其延遲加載到我的getView方法中。將web服務中的數據加載到列表視圖中的最佳方法

  • 有沒有更好的解決方案呢?
  • 如何正確緩存這些圖像?
  • 我可以在用戶旋轉設備時保留適配器的數據嗎?那麼從一開始就不需要再加載它們了?

我使用片段來顯示該列表?

回答

2

我會盡力一一回答所有三個問題。

有沒有解決方案呢? (其他然後延遲加載)

這取決於。關於延遲加載的好處在於,在顯示組件時,您不需要在開始時就擁有所有數據。問題通常是,如何根據需要獲取新數據。

因此,當從網絡加載新數據時,這實際上是一個加載數據塊有多大的問題。我不會在下一個條目後加載一個新條目,但會加載例如20個新的,當名單的末尾已經達到。

當然,這只是一個隨機的想法,你需要找到速度和可用性之間的最佳點。

所以當你從你的web服務中加載大量的數據,這些數據交付的速度足夠快時,它確實是一個很酷的概念。但是,如果你只是一個接一個地閱讀一個條目(因此,用戶幾乎總是等待新的數據),這實際上只是令人討厭。

如何正確緩存圖像?

可以使用多種可能的解決方案,其中一些是:

  • Using the system-cache,像瀏覽器(似乎是最好的 )。
  • 實現您自己的使用設備存儲的系統(例如 SD卡或內部應用程序存儲(首選 首選))。

您可能還喜歡this question(以及它的接受答案)的內容,給你一些關於內存管理的一般建議。

當用戶旋轉設備時,我可以保留適配器的數據嗎?

老,棄用雁:

是的,你可以使用 「實例狀態」 的活動來做到這一點。 基本上,來自活動 的 onSaveInstanceState()-method允許您使用狀態信息填充給定 Bundle,然後將 傳遞給 onCreate()-method

你會保存在 Bundle的數據將是(例如)名單的 當前位置或甚至列表本身(的大小取決於 )。

是的,使用Loaders API。它也在兼容性庫中提供。

+0

我想使用一個片段來顯示列表如何重新使用它的適配器? ü想說的onSaveInstanceState使用,但我打電話setRetain爲true在onCreate方法,這使任何捆綁總是空,因爲碎片不殺 – user1320899 2012-04-10 23:51:55

+0

@ user1320899這可能幫助你:http://stackoverflow.com/questions/5412746/android-片段onrestoreinstancestate – 2012-04-10 23:59:09

相關問題