我有一个 RecyclerView 图像,用户可以直接在 RecyclerView 本身中进行编辑。
编辑部分很好,效果很好。它是在覆盖图像的位图上完成的,然后将任何更改保存到图像文件中。一旦用户滚动recyclerview,位图就会被破坏并变得不可见。
问题是,用户所做的任何更改在滚动时都不可见。他们滚动旧图像,而不是编辑图像。他们必须离开回收站并回到其中才能看到变化。
那么如何强制 RecyclerView 重新加载刚刚保存的图像。我在我的适配器中使用 Glide,你可以看到我有基于图像保存时间的缓存。
class InfinityPageAdapter(val memo: Memo) : ListAdapter<Page, InfinityPageAdapter.ViewHolder>(PageDiffCallback()) {
class ViewHolder(pageView: View) : RecyclerView.ViewHolder(pageView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): InfinityPageAdapter.ViewHolder {
val pageView = LayoutInflater.from(parent.context).inflate(R.layout.infinity_page_list_item, parent, false)
return ViewHolder(pageView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val page = getItem(position)
val imageUrl = getMemoPath(memo.uuid) + page.uuid + ".webp"
if (imageUrl.isNotEmpty()) {
Glide.with(holder.itemView.context)
.load(imageUrl)
.apply(RequestOptions()
.signature(ObjectKey(System.currentTimeMillis()))
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.override(memo.pageWidth,memo.pageHeight)
)
.transition(DrawableTransitionOptions.withCrossFade())
.into(holder.itemView.findViewById(R.id.memo_page_image))
}
}
有没有办法通知 recyclerview 图像已更改,并强制重新加载图像?
我在适配器上使用 DiffUtil。我的理解是,当您使用 DiffUtil 时,我不需要使用 notifyDataSetChanged()。但我不明白您如何通知图像更改。
我不知道 Diff Callback 是否是问题所在。对于它的价值,它就在这里。它不查看图像文件本身,只查看图像文件的名称。可能是因为名称没有改变,所以图像没有更新。但我不想在每次编辑时都更改文件的名称。
class PageDiffCallback : DiffUtil.ItemCallback<Page>() {
override fun areItemsTheSame(oldItem: Page, newItem: Page): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Page, newItem: Page): Boolean {
return oldItem == newItem
}
}
谢谢!
约翰