我遇到了这个问题--只是为了测试目的,我从接收到的列表中将ParseFile添加到了ParseObject中。它不是只显示在该行中,而是每4-5行显示一次,有时更多,有时更少。我认为回收利用的观点与此有关。奇怪的是,其他数据(从本例中删除)可以很好地处理position变量。
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(parseList.get(position).get("logo") != null){
ParseFile image = (ParseFile) parseList.get(position).get("logo");
String url = image.getUrl();
Glide.with(context)
.load(url)
.placeholder(R.drawable.piwo_48)
.transform(new CircleTransform(context))
.into(holder.imageView);
}
}发布于 2015-09-24 16:39:35
这里的答案是不正确的,尽管它们在正确的轨道上。
您需要调用Glide#clear(),而不仅仅是将可绘制的图像设置为null。如果不调用clear(),完成无序的异步加载可能仍然会导致视图回收问题。您的代码应该如下所示:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (parseList.get(position).get("logo") != null) {
ParseFile image = (ParseFile) parseList.get(position).get("logo");
String url = image.getUrl();
Glide.with(context)
.load(url)
.placeholder(R.drawable.piwo_48)
.transform(new CircleTransform(context))
.into(holder.imageView);
} else {
// make sure Glide doesn't load anything into this view until told otherwise
Glide.with(context).clear(holder.imageView);
// remove the placeholder (optional); read comments below
holder.imageView.setImageDrawable(null);
}
} 发布于 2017-02-15 11:23:36
也许你该试试这样的方法
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))样本:
Glide.with(context)
.load(url)
.placeholder(R.drawable.progress_animation)
.crossFade()
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
.error(R.drawable.image_error_404)
.into(iv);发布于 2015-09-21 23:57:26
在RecyclerView中,每一行都使用新的数据进行回收。在您的代码中,您只在ImageView不是null时才设置它,否则什么也不做。在本例中,当它不是空时,ImageView将显示旧图像,因为您没有对当前对象进行override。您可以通过添加其他条件并将ImageView设置为空/空白来修复此问题。
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(parseList.get(position).get("logo") != null){
ParseFile image = (ParseFile) parseList.get(position).get("logo");
String url = image.getUrl();
Glide.with(context)
.load(url)
.placeholder(R.drawable.piwo_48)
.transform(new CircleTransform(context))
.into(holder.imageView);
}
else{
holder.imageView.setImageDrawable(null);
}
} https://stackoverflow.com/questions/32706246
复制相似问题