【问题标题】:Repetition of image while scrolling in Android grid view using Universal Image Loader使用通用图像加载器在 Android 网格视图中滚动时重复图像
【发布时间】:2014-05-08 17:48:48
【问题描述】:

我正在尝试使用以下代码在 gridview 上使用 Universal Image Loader 从 Internet 加载图像。

public View getView(int position, View converView, ViewGroup parent) {
        Log.v("Description", "Description is " + position);
        ViewHolder mVHolder;
        if (converView == null) {
            LayoutInflater vi = (LayoutInflater) conted.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            converView = vi.inflate(R.layout.customgrid, null);
            mVHolder = new ViewHolder();
            mVHolder.mImageView = (ImageView) converView
                    .findViewById(R.id.imgview);
            mVHolder.mTextView1 = (TextView) converView
                    .findViewById(R.id.textView1);
            mVHolder.mTextView2 = (TextView) converView
                    .findViewById(R.id.textView2);
            mVHolder.mTextView3 = (TextView) converView
                    .findViewById(R.id.textView3);

            converView.setTag(mVHolder);
        } else {
            mVHolder = (ViewHolder) converView.getTag();
        }
        // mVHolder.mImageView.setImageResource(mThumbIds[position]);
        // mVHolder.mImageView.setImageDrawable(LoadImageFromURL(
        // mThumbIds[position]));
        imageLoader.displayImage(mThumbIds[position],mVHolder.mImageView,options, animationListener);
        Log.v("Names",NAMES[position] + STATES[position] + CONSTITUENCY[position]);
        mVHolder.mTextView1.setText(NAMES[position]);
        mVHolder.mTextView2.setText(STATES[position]);
        mVHolder.mTextView3.setText(CONSTITUENCY[position]);
        return converView;
    }

但是,当我在列表中向下滚动时,第一行的第一个图像似乎在大多数网格中重复出现。它不会一直停留 - 一段时间后它会变回原始图像。我的问题是,这是 gridview 上的视图膨胀或 Universal Image Loader 的图像加载的问题吗?

【问题讨论】:

  • 这里的 imageLoader 是什么?
  • @user3431672,imageloader是通用图片加载器github.com/nostra13/Android-Universal-Image-Loader
  • 看来和适配器有关。只是为了测试,尝试删除视图的回收并查看图像是否正确显示。它会很慢,滚动会很慢。但它应该让我们知道我们在哪里有问题。那么我们应该可以很好地调试了。

标签: android image gridview universal-image-loader


【解决方案1】:

我认为您的问题是您没有像这样为DisplayImageOptions 设置resetViewBeforeLoading() 方法:-

     DisplayImageOptions options = new DisplayImageOptions.Builder()
    .showStubImage(R.drawable.stub_image)
    .showImageForEmptyUri(R.drawable.image_for_empty_url)
 ---->   .resetViewBeforeLoading(true)<----very important for recycling views
    .cacheInMemory()
    .cacheOnDisc()
    .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
    .bitmapConfig(Bitmap.Config.ARGB_8888) // default
    .delayBeforeLoading(1000)
    .displayer(new SimpleBitmapDisplayer()) // default
    .build();

然后应用这个 DisplayImageOptions。

        imageLoader.displayImage(mThumbIds[position],mVHolder.mImageView,options,                   animationListener);

【讨论】:

  • 情况并非如此,但它是相关的,我删除了 showStubImage(R.drawable.stub_image) 以查看效果并忘记了...现在添加并且它不重复图像谢谢.
  • 也为我解决了!但是,以上内容已被弃用。 Git Hub 页面上有更新的版本。
  • 您好,我也有类似的问题。我尝试了这个解决方案,但问题仍然没有解决。
  • 使用 resetViewBeforeLoading 对于大图像来说是个坏主意。
【解决方案2】:

另一种解决方案是使用 setTag() 来识别视图:

class ViewHolder {
    ImageView thumbnail;
    public boolean isSameView(String tag) {
        if (tag == null) {
            return thumbnail.getTag() == null;
        }
        return tag.equals(thumbnail.getTag());
    }
}


protected void imageLoader(ViewHolder holder, String imageUrl) {
    if (!holder.isSameView(imageUrl)) {  // If image is loaded correctly skip else reload and set new image
        holder.thumbnail.setTag(imageUrl);
        imageLoader.displayImage(imageUrl, holder.thumbnail, new SimpleImageLoadingListener() {@
            Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                view.setTag(failReason.getType().name()); // You can handle errors and avoid repeating requests that return error codes
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多