Android-Universal-Image-Loader不会在gridview中滚动加载的图像

我正在使用Android-Universal-Image-Loader库将远程图片加载到我的GridView单元格中的ImageView中。

这里的imageLoaderconfiguration:

new ImageLoaderConfiguration.Builder(Config.context) .threadPriority(Thread.NORM_PRIORITY - 2) .memoryCacheSize(20 * 1024 * 1024) // 20 Mb .memoryCache(new LruMemoryCache(20 * 1024 * 1024)) .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) .tasksProcessingOrder(QueueProcessingType.LIFO) .enableLogging() // Not necessary in common .build(); 

和显示选项:

 new DisplayImageOptions.Builder() .showStubImage(R.drawable.blank) .showImageForEmptyUri(R.drawable.no_image) .build(); 

问题:一旦gridview的活动开始所有工作正常,图像出现在单元格,然后我滚动网格(我有大约20个网格项目)和其他图像正确加载。 但是,一旦我滚动顶部已经加载的图像开始再次加载。

上下滚动几格之后,网格保存所有的图像,而且不会再消失。

有人遇到类似的问题,或者你知道我做错了什么。 感谢帮助。

ADDED :这里是我的适配器中的getView方法:

 @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; ViewHolder holder; if ( view == null ) { view = Config.context.getLayoutInflater().inflate(R.layout.featured, null); holder = new ViewHolder(); holder.titleText = (TextView) view.findViewById(R.id.featured_title); holder.priceText = (TextView) view.findViewById(R.id.featured_price); holder.image = (ImageView) view.findViewById(R.id.thumbnail_image); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } HashMap<String, String> listing = listings.get(position); /* set text values */ holder.titleText.setText(listing.get("title")); holder.priceText.setText(listing.get("price")); /* load image to list (AsyncTask) */ Utils.imageLoaderFeatured.displayImage(listing.get("photo"), holder.image, Utils.imageLoaderOptionsFeatured); return view; } 

PS。 让我知道如果你想看到其他代码(网格适配器也许)来帮助我解决这个问题。

约翰

Solutions Collecting From Web of "Android-Universal-Image-Loader不会在gridview中滚动加载的图像"

我在Universal-Image-Loader Demo上遇到了同样的问题,希望Library开发人员能够在下次更新中解决这个问题。

更新 :在nostra13的帮助下解决的问题,你必须更新库到1.9版本,并使用这种方式在imageView中显示图片:

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

它解决了我的问题。 为什么你应该这样做的一些细节可以在这里和这里find

您必须使用适配器,然后执行ViewHolder ,使滚动的stream动平稳和有效。 提供标签图像与他们在getView()提供的位置,然后将没有问题。

不要在适配器中使用set标签getView()method.always尝试在适配器getview()方法中查找视图标识符。

 public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; ViewHolder holder; view = Config.context.getLayoutInflater().inflate(R.layout.featured, null); holder = new ViewHolder(); holder.titleText = (TextView) view.findViewById(R.id.featured_title); holder.priceText = (TextView) view.findViewById(R.id.featured_price); holder.image = (ImageView) view.findViewById(R.id.thumbnail_image); view.setTag(holder); HashMap<String, String> listing = listings.get(position); /* set text values */ holder.titleText.setText(listing.get("title")); holder.priceText.setText(listing.get("price")); /* load image to list (AsyncTask) */ Utils.imageLoaderFeatured.displayImage(listing.get("photo"), holder.image, Utils.imageLoaderOptionsFeatured); return view;} 

您应该只声​​明ImageLoader和DisplayImageOptions实例一次。 可能在构造函数中。

 ImageLoader imageLoader = ImageLoader.getInstance(); DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true) .cacheOnDisc(true).resetViewBeforeLoading(true) .showImageForEmptyUri(fallbackImage) .showImageOnFail(fallbackImage) .showImageOnLoading(fallbackImage).build(); 

同样的问题在这里,使用StaggeredGridView。 即使有内存caching和ImageAware方法,也没有解决。

唯一对我有用的是将caching内存从4 MB扩展到10 MB。 列表图像很小,但是我有一个非常大的图像作为视图的标题。

我注意到,imageViews刷新也是一个长时间的点击,这是有效的,即使是GridView?

无论如何,扩大内存caching限制也解决了这个问题。

。我也面临同样的问题,并通过纠正解决问题

Utils.imageLoaderFeatured.displayImage(listing.get(“photo”),holder.image,Utils.imageLoaderOptionsFeatured); …….

行内的if(视图== NULL)……. iewhen你的转换视图== null只有然后加载图像和display.them ..这将解决您的问题…..