0

我尝试从资产中检索位图,然后尝试使用 glide as 加载 Horizo​​ntal recyclerview 图像列表asBitmap()。我得到了重复的图像和不匹配的图像(加载错误的图像代替所需的图像)。下面的屏幕截图显示笔记本电脑和手机加载了相同的位图,而Footware 和 Bus 加载了错误的位 这里笔记本电脑和手机加载了相同的位图,而Footware和Bus加载了错误的位图.skipMemoryCache(true)

我想解决同样想使用滑翔缓存来加载图像。

尝试了此页面中建议的以下几点: 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);

我在 set .diskCacheStrategy(DiskCacheStrategy.RESOURCE.diskCacheStrategy(DiskCacheStrategy.ALL).

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

4

1 回答 1

1

这个问题有时会发生在 recyclerviews recyclerviews 使用相同的 ViewHolders 来显示他们的列表项。因此很有可能同时在您的视图持有者的一个 ImageView 上调用了多个请求。对此的解决方法可能是停止该 ImageView 已经发生的任何其他 Glide 请求。

//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
}
于 2019-01-23T08:12:43.397 回答