当图像被覆盖时,RecyclerView 或 Glide 不会更新图像
RecyclerView or Glide doesn't update image when the image is overwritten
我在 RecyclerView.Adapter
扩展的适配器中使用 Glide in onBindViewHolder()
方法,如下所示:
Glide.with(context)
.load(imagePath)
.override(500, 500)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.into(((MyItemHolder) holder).imageView);
然后,我对作为数据提供给适配器的其中一张图像进行裁剪。裁剪图像后,我覆盖图像文件,即我用相同的文件名保存编辑后的图像。因此 imagePath
保持不变,而图像已更改。但是,即使使用单独的 notifyDataSetChanged()
调用,此更改也不会反映在 RecyclerView 中。如果我用不同的文件名保存编辑后的图像,就会反映出变化。
有没有办法在保持文件名不变的情况下检测图片内容的变化?
发生这种情况的原因是因为 Glide
正在缓存图像并且由于路径相同所以它不会知道更改。为此,您需要更改缓存策略并像这样跳过内存缓存:
Glide.with(context)
.load(imagePath)
.override(500, 500)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(((MyItemHolder) holder).imageView);
现在图像不会被缓存,图像会被更新。
我在 RecyclerView.Adapter
扩展的适配器中使用 Glide in onBindViewHolder()
方法,如下所示:
Glide.with(context)
.load(imagePath)
.override(500, 500)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.into(((MyItemHolder) holder).imageView);
然后,我对作为数据提供给适配器的其中一张图像进行裁剪。裁剪图像后,我覆盖图像文件,即我用相同的文件名保存编辑后的图像。因此 imagePath
保持不变,而图像已更改。但是,即使使用单独的 notifyDataSetChanged()
调用,此更改也不会反映在 RecyclerView 中。如果我用不同的文件名保存编辑后的图像,就会反映出变化。
有没有办法在保持文件名不变的情况下检测图片内容的变化?
发生这种情况的原因是因为 Glide
正在缓存图像并且由于路径相同所以它不会知道更改。为此,您需要更改缓存策略并像这样跳过内存缓存:
Glide.with(context)
.load(imagePath)
.override(500, 500)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(((MyItemHolder) holder).imageView);
现在图像不会被缓存,图像会被更新。