从 android 资产加载图像作为位图并使用 glideV4 设置 ImaegView 时复制图像

Duplicate images while loading the images from android assets as Bitmap and setting ImaegView using glideV4

我尝试从资产中检索位图,然后尝试使用 glide as asBitmap() 加载水平 recyclerview 图像列表。我得到重复的图像和不匹配的图像(加载错误的图像代替所需的图像)。下面的屏幕截图显示膝上型电脑和手机加载了相同的位图鞋类和总线加载了错误的位图 在我使用 .skipMemoryCache(true).

删除滑动缓存后它运行良好

我想解决同样想使用glide缓存加载图片的问题。

尝试了此页面中建议的以下几点: Glide recyclerview loading duplicate image 1)我添加了占位符。 2) 清除位图--> Glide.with(context).clear(holder.imgcat); 或使用 holder.imgcat.setImageBitmap(null); 3) skipMemoryCache(true) 运行良好,但需要缓存才能加载图像。

InputStream selectedInputStream = Application.get().getAssets().open(ImageSaver.selectedAssets + "/" + mValues.get(position).getImage_url());
                Drawable selectedImagesDrawable = Drawable.createFromStream(selectedInputStream, null);
                Bitmap selectedicon = ((BitmapDrawable) selectedImagesDrawable).getBitmap();
                if(selectedInputStream != null) {
                    try {
                        selectedInputStream.close();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                GlideApp.with(context)
                        .asBitmap()
                        .load(selectedicon)
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .error(R.drawable.placeholder)
                        .placeholder(R.drawable.placeholder)
                        .into(holder.imgcat);

我在设置时收到了重复的图像和不匹配的图像(加载了错误的图像来代替所需的图像) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) 或 .diskCacheStrategy(DiskCacheStrategy.ALL).

skipMemoryCache(true) 运行良好但需要缓存才能加载图像

recyclerviews有时会出现这个问题 recyclerviews 使用相同的 ViewHolders 来显示它们的列表项。 所以有可能在一个 ImageView 上调用了多个请求 你的 viewholders 在同一 time.a 解决这个问题可能是停止任何其他 Glide 请求已经为该 ImageView 发生。

//in your onBindViewHolder 
fun onBindViewHolder( holder:ViewHolder ,position:Int){
   //call this to clear previous requests
   Glide.with(context).clear(holder.imageView)
   //then make new request
   Glide.with(context).load(items[position].url).into(holder.imageview)
   //other codes
}