这是一种非常常见的情况:在必须从Internet下载的ListView中显示图像。Android - 将图像延迟加载到ListView中的问题
现在我有一个ArrayAdapter的自定义子类,它用于ListView。在ArrayAdapter的getView()实现中,我生成了一个单独的线程来加载图像。加载完成后,它会查找合适的ImageView并使用ImageView.setImageDrawable()设置图像。所以我使用的解决方案有点类似于这个:Lazy load of images in ListView
我遇到的问题是,只要我调用ImageView上的setImageDrawable(),ListView以某种方式刷新所有当前可见行列表!这导致一种无限循环的:
- getView()被调用
- 线程派生加载图像
- 图像被加载; setImageDrawable()调用ImageView的
- ListView控件将它拾起出于某种原因,并刷新自身
- 对于ListView刷新,getView()被调用每个可见行,让我们回到步骤1,整个事情重复自己
因此,据我所见,解决方案中提出的“Android - 我如何在ListView中执行延迟加载的图像”(请参阅上面的链接)根本不起作用。它可能看起来像它,但它会运行得非常慢,因为在后台,它会不断重新加载当前可见的行。
有没有人遇到过和/或有解决方案吗?
是的我正在使用地图来缓存图像。但是,这并不重要,因为我最终仍然调用setImageDrawable(),它再次触发刷新。如果我能以某种方式禁用refesh它会解决我的问题。 我不使用SoftReferences(但我会),但这只是一个内存优化,这不能解决无限循环 – 2009-09-11 09:00:53
好点我误解了你的意思是'线程被派生到*加载*图像' 。我会重写我的回答 – Will 2009-09-11 09:03:58
感谢您的快速回复:)当您不重复使用视图来显示像我一样的行时,您现在描述的内容确实解决了问题。重用行我的意思是使用getView()给出的“convertView”参数。在重新使用行视图时,你是否知道这个解决方案? (因为在这种情况下,你必须每次都调用setImageDrawable()) – 2009-09-11 09:25:07