android - UIL,Picasso - 适配器中的图像总是在停止滚动时重新加载

标签 android android-listview universal-image-loader picasso

我有来自互联网的带有文本和大图像的 ListView。我的图像项目具有合适的宽度和 wrap_content 高度。
我尝试使用 UILPicasso 在背景中显示图像。它们都可以工作,但是当我停止滚动时图像总是重新加载,这会使 ListView 闪烁
它看起来像这样:

enter image description here

您可以看到当我停止滚动(我向下滚动然后向上滚动)时它会重新加载下载和缓存的图像
我怎样才能防止这种情况发生?

 <ImageView android:id="@+id/imgFeed"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="centerCrop"/>

 // UIL
 options = new DisplayImageOptions.Builder()
 .showImageOnLoading(defaultImage)
 .showImageOnFail(defaultImage)
 .showImageForEmptyUri(defaultImage)
 .resetViewBeforeLoading(false)
 .cacheOnDisk(true).delayBeforeLoading(0)
 .displayer(new  FadeInBitmapDisplayer(200)).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY_STRETCHED).build();

 ImageAware imageAware = new ImageViewAware(viewHolder.imgFeed, false); 
 ImageLoader.getInstance().displayImage(item.getPhotoUrl(), imageAware, options);

// Picasso
 Picasso.with(getContext())
                        .load(item.getPhotoUrl())
                        .placeholder(R.drawable.place_holder_big)
                        .resize(screenWidth, 0) //set max width
                        .into(viewHolder.imgFeed);

对于UIL,我在this issue中尝试了很多方法但它们根本不适合我。

更新:似乎我遇到了类似 this question 的内存缓存问题.但是我该如何解决这个问题呢?看看 Facebook 应用程序,他们做得很好。所有图像都有不同的尺寸和适合的宽度,并且无需重新加载图像即可非常流畅地滚动。他们怎么做到的?

最佳答案

如果您想知道 Facebook 是如何做到的,他们实际上发布了他们的图像加载库 (https://github.com/facebook/fresco)

是否有可能您当时实际上是在底层 ListView 上调用 notifyDataSetChanged?你也在使用 hasStableIds() 吗?

对于 UIL,您可以尝试使用 Wea​​kMemoryCache(请参阅 https://github.com/nostra13/Android-Universal-Image-Loader/wiki/Useful-Info),因为这在理论上允许您使用所有可用内存,尽管它可能会导致大量额外的 GC 调用。

Picasso Taha 的方法看起来是您最好的选择!

关于android - UIL,Picasso - 适配器中的图像总是在停止滚动时重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167376/

相关文章:

android - 拦截 Android 上的主页按钮

java - JNI如何管理C++代码中的静态变量?

android - 最多需要一个元素 <application> 命名空间为 '',但找到了 4 个

android - 单击 ListView ListItem 中的 ImageView 并获取位置?

android - 以编程方式设置 ListView stackFromBottom

android - 通用图像加载器 - 网络无法访问

java - 为抽屉导航添加阴影会出错

android - 第二次启动 Activity 时的奇怪行为

android - Universal Image Loader 在每次滚动后重新加载图像

android - 升级到新版本 1.9.5 后,Universal Image Loader 无法正常工作