RecyclerView или Glide не обновляют изображение, когда оно перезаписано - PullRequest
0 голосов
/ 07 сентября 2018

Я использую Glide в методе onBindViewHolder() в адаптере, расширенном с RecyclerView.Adapter следующим образом:

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

Затем я обрезаю одно из изображений, которые передаются в качестве данных на адаптер. После обрезки изображения я перезаписываю файл изображения, то есть сохраняю отредактированное изображение с тем же именем файла. Таким образом, imagePath остается прежним, тогда как изображение изменилось. Однако это изменение не отражается в RecyclerView даже при отдельном вызове notifyDataSetChanged(). Изменение отразится, если я сохраню отредактированное изображение под другим именем.

Есть ли способ добиться обнаружения изменения содержимого изображения при сохранении имени файла?

1 Ответ

0 голосов
/ 07 сентября 2018

Причина, по которой это происходит, заключается в том, что Glide кэширует изображение и, поскольку путь такой же, поэтому он не узнает об изменении. Чтобы это работало, вам нужно изменить стратегию кеширования и пропустить кеш памяти следующим образом:

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

Теперь изображение не будет кэшироваться, и изображение будет обновлено.

...