Android 回收视图或滑动不';t在图像被覆盖时更新图像

Android 回收视图或滑动不';t在图像被覆盖时更新图像,android,android-recyclerview,android-glide,Android,Android Recyclerview,Android Glide,我在从RecyclerView.adapter扩展而来的适配器中使用Glide inonBindViewHolder()方法,如下所示: Glide.with(context) .load(imagePath) .override(500, 500) .crossFade() .diskCacheStrategy(DiskCacheStrategy.RESULT) .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);

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

发生这种情况的原因是
Glide
正在缓存图像,并且由于路径相同,因此它不会了解更改。为此,您需要更改缓存策略并跳过内存缓存,如下所示:

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

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

值得注意的是,绕过这些策略会影响性能-但这个答案是100%正确的。@MarkKeen同意,但这是解决问题的唯一方法,因为缓存密钥是根据URL保存的(在上述情况下为imagePath),因此,除非imagePath发生更改,否则Glide将不会更新缓存,即使路径中存储的内容发生了更改,我也尝试了
DiskCacheStrategy。无
,并且它不起作用。我现在添加了
skipMemoryCache(true)
part,它正在工作。我担心性能,所以我会使用不同的文件名,但这似乎是唯一的办法。@SudhanshuVohra我知道-我同意你的解决方案,并投了赞成票!:)。我的评论纯粹是为了让OP知道。您的解决方案是正确的,但在调用notifyDataSetChanged()时重新加载整个RecyclerView;刷新glide还有其他解决方案吗?值得注意的是,绕过这些策略会影响性能-但这个答案是100%正确的。@MarkKeen同意,但这是解决问题的唯一方法,因为缓存密钥是根据URL保存的(在上述情况下为imagePath),因此除非imagePath发生更改,Glide将不会更新缓存,即使路径中存储的内容发生了更改。我尝试了
DiskCacheStrategy。无
,它也不起作用。我现在添加了
skipMemoryCache(true)
part,它正在工作。我担心性能,所以我会使用不同的文件名,但这似乎是唯一的办法。@SudhanshuVohra我知道-我同意你的解决方案,并投了赞成票!:)。我的评论纯粹是为了让OP知道。您的解决方案是正确的,但在调用notifyDataSetChanged()时重新加载整个RecyclerView;是否有其他刷新glide的解决方案?