Android – 如何在滚动时停止RecyclerView中的图像重新加载

我正在创build一个应用程序来从互联网加载图像卡。 我正在使用Recyclerview的上市目的。 对于下载图像,我已经尝试过毕加索,通用图像下载和其他自定义方法,但到处都有这个问题:

每当我向下滚动,在imageview中的图像正在重新加载。 我甚至保持一个条件,检查如果imageview包含图像,但也似乎不工作,或者我的代码可能有错误。 但我无法find解决这个问题的办法。 下面我附加了我的代码的“onBindViewHolder”函数,我认为这是有问题的部分。 这里的图像是一个包含图像URL的string数组列表。

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.default_card, parent, false); ViewHolder viewHolder; viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { String url = images.get(position); if (holder.imgView.getDrawable() != null) { //Do Nothing } else { ImageLoader.getInstance().displayImage(url, holder.imgView); } } 

Solutions Collecting From Web of "Android – 如何在滚动时停止RecyclerView中的图像重新加载"

首先,你的代码中有一个错误 – 你必须从onBindViewHolder移除条件。 所有ImageView实例在每次要显示时都必须更新。

 @Override public void onBindViewHolder(ViewHolder holder, int position) { String url = images.get(position); ImageLoader.getInstance().displayImage(url, holder.imgView); } 

重装部分

问题是,你可能没有使用任何caching(内存,或基于磁盘)。 我不会详细说明这一点,集合视图中的图像caching是一个非常普遍的问题,我相信一个快速的StackOverflowsearch会给你很多结果。

特别是 – 通用映像默认情况下没有启用caching您可以将其打开。

 DisplayImageOptions options = new DisplayImageOptions.Builder() ... .cacheInMemory(true) .cacheOnDisk(true) ... .build(); ImageLoader.getInstance().displayImage(imageUrl, imageView, options); // Incoming options will be used 

或者您可以在全球范围内为您的应用程序设置它,只需检查文档。

如果您不想使用caching,则可以使用setItemViewCacheSize(size)并在不需要重新加载的位置提及大小。 而已。 Recyclerview版本24.0.0

你可以使用.fit()与毕加索。 希望能解决你的问题

 Picasso.with(persons.get(i).context) .load(persons.get(i).photoId) .placeholder(R.drawable.placeholder) .fit() .into(personPhoto);