我在从onBindViewHolder()
扩展的适配器中使用了RecyclerView.Adapter
方法中的Glide,如下所示:
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);
现在图像不会被缓存,图像将会更新。