我有一个自定义列表,每行显示图像和文本以及图像都必须从服务器下载。
所以我已经定制了我的适配器,并且在那个 getView 方法中我已经启动了一个异步任务来下载图像。
但问题是,如果列表中有 50 个项目,那么如果我一次从列表中的第 1 个项目滚动到第 50 个项目,
然后对于每一行,它将开始下载图像,无论该行是否薄,甚至没有显示...
那么这可能是什么解决方案?
任何帮助将不胜感激
谢谢
我有一个自定义列表,每行显示图像和文本以及图像都必须从服务器下载。
所以我已经定制了我的适配器,并且在那个 getView 方法中我已经启动了一个异步任务来下载图像。
但问题是,如果列表中有 50 个项目,那么如果我一次从列表中的第 1 个项目滚动到第 50 个项目,
然后对于每一行,它将开始下载图像,无论该行是否薄,甚至没有显示...
那么这可能是什么解决方案?
任何帮助将不胜感激
谢谢
这是一个众所周知的问题。阅读Lazy Image Loading并找到类似的问题。特别是当您添加 convertView 使用等时,这不是那么明显的问题。
一个快速的解决方法 - 我建议在 ThreadExecutor 上下载图像,例如最多 4 个线程,并取消所有不再需要的任务。当您使用 convertView - 您可以使用 setTag(asyncTask) 将任务附加到视图并在新任务出现时取消它。您还可以使用 LRU 缓存来存储一些图像,而不是在每次滚动列表时加载它们。
仅对可见行调用 getView。因此,如果您从那里开始下载,它只会下载显示的视图。注意:永远不要自己调用适配器的 getView,你会导致 listView 出现重大问题。