覆盖图像后,RecyclerView或Glide不会更新图像

时间:2018-09-07 00:11:57

标签: android android-recyclerview recycler-adapter android-glide

我在onBindViewHolder()扩展的适配器中以RecyclerView.Adapter方法使用Glide,如下所示:

Glide.with(context)
    .load(imagePath)
    .override(500, 500)
    .crossFade()
    .diskCacheStrategy(DiskCacheStrategy.RESULT)
    .into(((MyItemHolder) holder).imageView);

然后,我确实裁剪了其中一张作为适配器数据提供的图像。裁剪图像后,我覆盖了图像文件,即,我用相同的文件名保存了编辑后的图像。因此imagePath保持不变,而图像已更改。但是,即使通过单独的notifyDataSetChanged()调用,此更改也不会反映在RecyclerView中。如果我使用其他文件名保存编辑后的图像,则会反映出更改。

有什么方法可以在保持文件名相同的情况下检测图像内容的变化吗?

1 个答案:

答案 0 :(得分:2)

发生这种情况的原因是因为Glide正在缓存图像,并且由于路径相同,因此将无法了解更改。为此,您需要更改缓存策略并像这样跳过内存缓存:

Glide.with(context)
    .load(imagePath)
    .override(500, 500)
    .crossFade()
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .skipMemoryCache(true)
    .into(((MyItemHolder) holder).imageView);

现在图像将不会被缓存并且图像将被更新。