在 RecyclerView 中单击时使用 Picasso 或任何图像加载器重新加载图像

Posted

技术标签:

【中文标题】在 RecyclerView 中单击时使用 Picasso 或任何图像加载器重新加载图像【英文标题】:Reload Image with Picasso or any Image-loader on click in RecycleView 【发布时间】:2019-10-20 21:49:34 【问题描述】:

在 Recycleview 中更新图像

我正在开发聊天应用程序,当用户在 Recycleview 中单击 imageview 时,我正在将图像下载到本地存储,然后尝试使用 picasso 重新加载,然后 Recycleview 正在跳转到另一个位置。

注意:根据我的研发,我理解 Imageview 在重新加载时需要焦点。我不确定,请让我了解在特定位置在 Recycleview 中重新加载图像的最佳方法是什么,而不会像 whatsapp 在点击下载时在聊天屏幕中加载图像那样跳跃。

我正在使用以下方法来更新特定位置。

 notifyItemChanged(position);

如果我尝试使用以下方法重新加载,那么没问题,但是从 URI

加载时可能会出现 OOM(内存不足)
 messageImageView.setImageURI(Uri.fromFile(fileImage));
 messageImageView.setImageResource(R.drawable.icn_conv_clicktodownload);

问题案例:

Picasso.get().load(fileImage).resize(viewWidth, viewHeight).
                    centerCrop().into(messageImageView);

【问题讨论】:

尝试 notifyItemInserted() 或 notifyItemRangeInserted 而不是 notifyItemChanged @SachinSoma,谢谢,我也试过了,但仍然面临同样的问题。 【参考方案1】:

试试这个...从这个链接引用的答案..here

// Save state
private Parcelable recyclerViewState;
recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();

// Restore state
notifyItemChanged(position);
recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);

【讨论】:

你能解释一下为什么我应该保存recyclerView的状态来更新Viewholder中的图像..? 因为在 notifyItemChanged() 之后,您的 recyclerview 滚动到顶部位置。 我尝试了同样的方法,但它没有帮助我,我理解在视图中重新加载图片时它失去了焦点。我想了解如何获得 imageview 的焦点..?

以上是关于在 RecyclerView 中单击时使用 Picasso 或任何图像加载器重新加载图像的主要内容,如果未能解决你的问题,请参考以下文章

单击后退按钮时,在 RecyclerView 中获得相同的项目位置

RecyclerView的Item的单击事件

如何在单击 RecyclerView 项目时从一个片段移动到另一个片段

在通知单击时将项目添加到片段内的 recyclerview

在recyclerview中单击项目时,如何阻止手势检测器在单击时执行长按?

为啥在我第一次单击按钮时在我的 RecyclerView 中调用绑定?