【问题标题】:Listview flickering on notifyDataSetChanged() when using universal image loader使用通用图像加载器时,Listview 在 notifyDataSetChanged() 上闪烁
【发布时间】:2014-08-18 05:18:30
【问题描述】:

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

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 = 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();

【问题讨论】:

  • :我也面临同样的问题。想要解决它。如果您有任何解决方案,请与我们合作。
  • @Jigs:我用毕加索替换了那个库,它没有这样的问题。这是链接:square.github.io/picasso
  • 我可以将毕加索库与通用图像加载器一起使用吗?或者我必须按照链接建议修改我的代码??
  • @Jigs:修改一下就更好了。我已经完全删除了通用图像加载器,现在只使用 Picasso。
  • 我用毕加索完全取代了通用加载器,但我在下载图像时仍然遇到闪烁问题。当我试图将图像存储到缓存中时,它工作正常,但我没有上传新的来自服务器的图像,如果我清除该缓存,则会发生闪烁。任何解决方案都可以解决 ????

标签: android universal-image-loader


【解决方案1】:

解决方案是在图像未更改时不重新加载。

在你的适配器 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,以便下次重新加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多