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

R4j*_*R4j 11 android android-listview universal-image-loader picasso

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

在此输入图像描述

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

 <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);
Run Code Online (Sandbox Code Playgroud)

对于UIL,我在这个问题上尝试了很多方法,但它们根本不适用于我.

更新:似乎我遇到了像这个问题的内存缓存问题.但是我该如何解决这个问题呢?看看Facebook应用程序,他们做得非常好.所有图像都有不同的尺寸,适合的宽度,非常平滑的滚动,无需重新加载图像.他们怎么能这样做?

Nyx*_*Nyx 4

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

您当时是否有可能实际上在底层 ListView 上调用了 notificationDataSetChanged ?您还使用 hasStableIds() 吗?

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

毕加索·塔哈的方法看起来是您最好的选择!