当图像被覆盖时,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);

现在图像不会被缓存,图像会被更新。