代码之家  ›  专栏  ›  技术社区  ›  Mehmed Andrew Lam

当图像被覆盖时,RecyclerView或Glide不会更新图像

  •  0
  • Mehmed Andrew Lam  · 技术社区  · 6 年前

    onBindViewHolder() 从扩展的适配器中的方法 RecyclerView.Adapter 具体如下:

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

    然后,我在其中一个作为数据提供给适配器的图像中进行裁剪。裁剪图像后,我将覆盖图像文件,即用相同的文件名保存编辑过的图像。所以 imagePath 图像发生变化时保持不变。但是,即使使用单独的 notifyDataSetChanged()

    有没有办法在保持文件名不变的情况下检测图像内容的变化?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Sudhanshu Vohra    6 年前

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

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

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