我遇到了一個關於在listview中延遲加載圖像的早期文章,並嘗試用已發佈的答案進行實驗(第一個答案與綠色檢查)。 Lazy load of images in ListView。懶惰加載圖像在ListView的前一篇文章?
但是我仍然有兩件事情混爲一談:
什麼是在一個列表視圖中的「懶加載」的定義是什麼? 從我之前認爲的UI角度來看,如果項目圖像本地存儲在手機中,「延遲加載」意味着您不會開始加載列表項目,直到用戶可以看到或滾動到該項目(當項目超過1屏幕)。但是,在這裏,圖像存儲在遠程URL中,這似乎意味着'圖像是從URL第一次加載的,之後將從本地緩存中加載',這是'懶惰'的想法嗎?
在第1個回答的帖子裏,這個DrawableManager.fetchDrawable()方法不能直接在listview適配器的getView()方法中使用,看起來好像。我從ddms日誌(參見下文)獲取下面的錯誤消息,並且它說''NetworkOnMainThreadException'。那麼如何在這裏使用ListView中的DrawableManager.fetchDrawable()?是否真的只有像DrawableManager.fetchDrawableOnThread()這樣的基於線程的實現可以在列表適配器的getView()函數中使用?
你可以分享一些關於這些問題的想法嗎?欣賞它。
10-25 04:52:43.628: E/AndroidRuntime(2231): FATAL EXCEPTION: main
10-25 04:52:43.628: E/AndroidRuntime(2231): android.os.NetworkOnMainThreadException
10-25 04:52:43.628: E/AndroidRuntime(2231): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
10-25 04:52:43.628: E/AndroidRuntime(2231): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
10-25 04:52:43.628: E/AndroidRuntime(2231): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
10-25 04:52:43.628: E/AndroidRuntime(2231): at java.net.InetAddress.getAllByName(InetAddress.java:220)
10-25 04:52:43.628: E/AndroidRuntime(2231): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
10-25 04:52:43.628: E/AndroidRuntime(2231): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
10-25 04:52:43.628: E/AndroidRuntime(2231): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
10-25 04:52:43.628: E/AndroidRuntime(2231): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
10-25 04:52:43.628: E/AndroidRuntime(2231): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
10-25 04:52:43.628: E/AndroidRuntime(2231): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-25 04:52:43.628: E/AndroidRuntime(2231): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-25 04:52:43.628: E/AndroidRuntime(2231): at com.example.fairfax.MainActivity$DrawableManager.fetch(MainActivity.java:230)
10-25 04:52:43.628: E/AndroidRuntime(2231): at com.example.fairfax.MainActivity$DrawableManager.fetchDrawable(MainActivity.java:187)
10-25 04:52:43.628: E/AndroidRuntime(2231): at com.example.fairfax.MainActivity$LazyAdapter.getView(MainActivity.java:162)
我建議你嘗試Fedor的懶加載邏輯:http://stackoverflow.com/a/3068012/379693 –
謝謝帕雷希。這是一個很好的建議。 – user1559625