回收器视图滚动时,Glide保留旧的图像缓存参考

时间:2019-06-10 10:34:01

标签: android android-glide

我有一个要在回收站视图中显示的图像列表。我正在使用Glide lib加载图像。一切正常,并且工作正常,但令人讨厌的事情使我作为开发人员的生活变得非常艰难。当我向上/向下滚动回收站视图时,Glide会保留旧的位置参考,并在滚动停止后对图像进行混洗以设置实际的位置。正在从cloudinary URL以及设备本地存储路径加载图像。我在下面发布我的代码。任何人对这个问题有任何线索或答案,请帮助我。预先感谢。

RequestOptions requestOptions = new RequestOptions()
                .skipMemoryCache(false)
                .signature(new MediaStoreSignature("IMAGE",System.currentTimeMillis(),0))
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .override(100, 100)
                .placeholder(R.drawable.bg_round_corner_imageview)
                .error(R.drawable.bg_round_corner_imageview);

Glide.with(mContext)
       .setDefaultRequestOptions(new RequestOptions()
                                    .placeholder(R.mipmap.ic_launcher))
       .asBitmap()
       .load(urlProfileImage)
       .thumbnail(0.1f)
       .apply(requestOptions)                              
       .placeholder(R.drawable.bg_round_corner_imageview)                              
       .error(R.drawable.bg_round_corner_imageview))
       .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(@NonNull Bitmap resource, @Nullable
            Transition<? super Bitmap> transition) {
                view.setImageBitmap(resource);                                       
                view.setBackground(mContext.getResources()                                                .getDrawable(R.drawable.bg_round_corner_imageview));
                view.setClipToOutline(true);
            }
       });

3 个答案:

答案 0 :(得分:0)

基本上,此行引起滚动滚动回收器视图时将它们显示为两倍的问题。您应该为指南正确选择缓存策略。

而不是您应该使用

   .diskCacheStrategy(DiskCacheStrategy.NONE)

答案 1 :(得分:0)

尝试覆盖适配器中的 onViewRecycled 方法并设置默认/占位符图像。

例如

@Override
public void onViewRecycled(ViewHolder holder) {
    super.onViewRecycled(holder);
    Glide.with(mContext).load(R.drawable.bg_round_corner_imageview).into(holder.imageview);
}

答案 2 :(得分:0)

我认为您已经为检查 urlProfileImage 是否为空

设置了一些条件

如果为null,则不调用glide并且setVisibility == False,

如果不为null,则使用glide和setVisibility == TRUE加载Image。