我的活动中有一个GridView,显示从远程服务器获取的大约30个缩略图。我正在为图像进行2级缓存:
从GridView-Adapter的getView中,我调用Cache类的getCachedImage函数,该函数将返回默认图像或来自其中一个缓存的图像。返回默认图像时,Cache类启动AsyncTask以从远程服务器获取图像。然后,该图像也会写入两个缓存中。
问题是:当AsyncTask完成时,我希望它还能与缓存一起更新UI。我尝试将GridView子项(ImageView)的实例传递给AsyncTask,然后在AsyncTask的postExecute中设置此子视图的图像,但由于View回收,这种方法导致错误视图中的图像不正确,如果提取需要很长时间。
有什么方法可以让我的AsyncTask更加主动,这意味着它应该让UI知道图像下载已经完成了?
谢谢!
答案 0 :(得分:3)
我使用CWAC-Thumbnail执行的方法是执行您所做的一切,但也会通过ImageView
将ImageView
对象标记中的setTag()
显示为当前显示的网址。然后,当AsyncTask
结束时,我会检查标记以查看ImageView
的网址是否与任务下载的网址相匹配。如果他们这样做,我应用图像。如果没有,我没有。
答案 1 :(得分:0)
处理这种情况的一种方法是简单地编写一个自定义图像视图(继承ImageView),它能够自己处理所有这些东西。
然后您可以将自定义图像视图放在任何需要的地方,只需在其上调用类似“startLoading”的内容即可。 在这个“startLoading”中,只需输入你描述的逻辑。