我尝试从资产中检索位图,然后尝试使用asBitmap()
滑行来加载Horizontal Recyclerview图像列表。我得到重复的图像和不匹配的图像(加载错误的图像代替所需的图像)。下面的屏幕截图显示了笔记本电脑和手机已加载相同的位图,并且固件和总线加载了错误的位图
我使用.skipMemoryCache(true)
删除了滑动缓存后,效果很好。
我想解决同样的问题,想要使用滑行缓存加载图像。
尝试了以下在页面中建议的要点:
Glide recyclerview loading duplicate image
1)我添加了palceholder。
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)
运作良好,但需要缓存才能加载图像
答案 0 :(得分: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
}