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

时间:2013-07-17 08:22:16

标签: android image loader universal universal-image-loader

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

这里是imageLoader配置:

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。如果您想查看其他代码(可能是网格适配器)来帮助我解决此问题,请告诉我。

约翰

6 个答案:

答案 0 :(得分:16)

我在Universal-Image-Loader演示中遇到了同样的问题,我希望图书馆开发人员能够在下次更新时解决问题。

更新:在 nostra13 的帮助下修复了问题,您必须将库更新为1.9 version并使用这种方式在{{{{}}中显示图片1}}:

imageView

它解决了我的问题。您可以在herehere

找到有关您应该执行此操作的详细信息

答案 1 :(得分:1)

您必须使用适配器然后实现ViewHolder以使滚动流程平稳有效。 为图像提供标签w.r.t到getView()中提供的位置,然后就没有问题了。

答案 2 :(得分:1)

请勿在适配器getView()方法中使用set标记。请尝试在适配器getview()方法中查找视图ID。

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;}

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

这里使用StaggeredGridView也是同样的问题。 即使使用内存缓存和ImageAware方法,也无法解决。

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

我注意到imageViews也会在长时间点击时刷新,即使对于GridView也是如此?

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

答案 5 :(得分:-1)

.i也遇到了同样的问题并通过wirting解决了问题

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

里面的行如果(view == null).......你的转换视图== null只有加载图像和display.them ..这将解决你的问题.....