我在listview中发现了关于延迟加载图像的早期帖子,并尝试使用已发布的答案进行试验(第一个答案带有绿色检查)。 Lazy load of images in ListView
然而,我仍然对两件事情感到困惑:
列表视图中“延迟加载”的定义是什么? 根据我以前在UI视角上的想法,如果项目图像存储在手机本地,“延迟加载”意味着您不会开始加载列表项,直到用户可以看到或滚动到该项目(当项目超过1个屏幕时)。但是在这里,将图像存储在远程网址中,似乎意味着“第一次从网址加载图片,之后将从本地缓存加载”,这是“懒惰”的想法吗?
在帖子的第一个答案中, DrawableManager.fetchDrawable()方法无法直接在listview适配器的getView()方法中使用,看来。我在下面来自ddms log的错误消息(见下文),它说的是' NetworkOnMainThreadException '。那么如何在listview中使用DrawableManager.fetchDrawable()呢?是否只能在列表适配器的getView()函数中使用像DrawableManager.fetchDrawableOnThread()这样的基于线程的实现?
你能否就这些问题分享一些想法?欣赏它。
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)
答案 0 :(得分:0)
答案 1 :(得分:0)
您应该调用fetchDrawableOnThread
方法并将您的网址和图片视图作为参数传递,
因为通过调用此方法,您将图像下载任务提供给非ui线程,然后使用Handler
更新ui来发送消息。