我在onBindViewHolder()
扩展的适配器中以RecyclerView.Adapter
方法使用Glide,如下所示:
Glide.with(context)
.load(imagePath)
.override(500, 500)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.into(((MyItemHolder) holder).imageView);
然后,我确实裁剪了其中一张作为适配器数据提供的图像。裁剪图像后,我覆盖了图像文件,即,我用相同的文件名保存了编辑后的图像。因此imagePath
保持不变,而图像已更改。但是,即使通过单独的notifyDataSetChanged()
调用,此更改也不会反映在RecyclerView中。如果我使用其他文件名保存编辑后的图像,则会反映出更改。
有什么方法可以在保持文件名相同的情况下检测图像内容的变化吗?
答案 0 :(得分:2)
发生这种情况的原因是因为Glide
正在缓存图像,并且由于路径相同,因此将无法了解更改。为此,您需要更改缓存策略并像这样跳过内存缓存:
Glide.with(context)
.load(imagePath)
.override(500, 500)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(((MyItemHolder) holder).imageView);
现在图像将不会被缓存并且图像将被更新。