Tom*_*ren 7 java android listview lazy-loading image
这是一种非常常见的情况:在ListView中显示必须从Internet下载的图像.
现在我有一个ArrayAdapter的自定义子类,我将其用于ListView.在ArrayAdapter的getView()实现中,我生成了一个单独的线程来加载图像.加载完成后,它会查找相应的ImageView并使用ImageView.setImageDrawable()设置图像.所以我使用的解决方案与此类似:在ListView中延迟加载图像
我遇到的问题是,一旦我在ImageView上调用setImageDrawable(),ListView就会以某种方式刷新列表中所有当前可见的行!这会产生一种无限循环:
所以据我所知,"Android中如何在ListView中对图像进行延迟加载"(参见上面的链接)中提出的解决方案根本不起作用.它可能看起来像它,但它会运行得非常慢,因为在后台,它会不断重新加载当前可见的行.
之前是否有人遇到此问题和/或有解决方案?
在链接的解决方案中,fetchDrawableOnThread()仅当视图尚未具有正确的可绘制对象时才应调用。
如果返回 null,则视图没有可绘制对象getDrawable()。
如果您正在重用插槽,您会认为需要进一步管理状态。fetchDrawableOnThread()例如,如果您的视图有一个存储 URL 的成员变量,以及一个表示是否已加载的布尔值,那么很容易知道是否调用。
我推测该可绘制对象toString()详细说明了加载图像的路径。(如果没有,您可以对返回的可绘制对象进行子类化以使其如此)。在这种情况下,您可以避免使用上面概述的布尔值,而只需进行比较以确定它是否是正确的可绘制对象或是否获取替换值。
此外,可见行上的 getView() 应确保那些不再可见的行被卸载,以防止内存耗尽。正如原始线程上的另一张海报指出的那样,一种技巧是将不再可见的图像移动到软引用(以便在需要内存时卸载它们)。
| 归档时间: |
|
| 查看次数: |
12391 次 |
| 最近记录: |