当使用通用图像加载程序时,调用notifyDataSetChanged()时Listview会闪烁

3

我遇到了下面链接中提到的相同问题:

https://github.com/nostra13/Android-Universal-Image-Loader/issues/376

我已经检查了上面链接中的解决方案,看起来下面的解决方案可以解决问题:
ImageAware imageAware = new ImageViewAware(imageView, false);
imageLoader.displayImage(imageUri, imageAware);

如果在上述代码中将选项传递给displayImage()方法,同样会出现闪烁问题。这意味着下面的代码会引起问题:

ImageAware imageAware = new ImageViewAware(imageView, false);
imageLoader.displayImage(imageUri, imageAware,options);

我应该如何解决在向“displayImage()”方法传递“options”参数时出现的闪烁问题?
这是我正在传递给该方法的选项:
options = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.empty).showImageOnLoading(R.drawable,loading).showImageOnFail(R.drawable.failed).cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565).imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();

我也遇到了同样的问题。如果你有解决方案,请与我们分享。 - Radhey
1
@Jigs:我用Picasso替换了那个库,它没有这样的问题。这是链接:http://square.github.io/picasso/ - roy mathew
我能否在Universal Image Loader中使用Picasso库?还是我需要根据链接建议修改我的代码? - Radhey
我已经完全用Picasso替换了通用的加载器,但是在下载图像时仍然出现闪烁问题。当我尝试将图像存储到缓存中时,它可以正常工作,但是我无法获取来自服务器的新上传图像,如果清除缓存,则会出现闪烁。有没有解决方法? - Radhey
你说得对,兄弟。但是如果我不清除缓存,我就无法从服务器获取新上传的图片。为此,我使用了PicassoTools类的cache.clear方法。我的代码有什么问题吗?@roy mathew - Radhey
显示剩余4条评论
1个回答

0
解决方案是在图像未更改时不重新加载它。
在您的适配器getView()中执行以下操作:
// schedule rendering:
final String path = ... (set path here);
if (holder.lastImageUrl == null || !holder.lastImageUrl.equals(path)
                || holder.headerImageView.getDrawable() == null) {
    // refresh image
    imageLoader.displayImage(imageUri, imageAware);
} else {
    // do nothing, image did not change and does not need to be updated
}

成功时(添加一个ImageLoadingListener),您设置holder.lastImageUrl = path,失败和取消时,将holder.lastImageUrl设置为null,以便下次重新加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接