当我在Recyclerview回收中向下滚动时不能正常工作

时间:2015-09-17 08:14:36

标签: android

这是我的代码
当我向上和向下滚动时,即使在那些位置图像路径不存在的情况下,图像也会添加到其他位置。假设图像路径位于1,2和3位置,但它也显示4,10,15位置的图像等

for value in mySequence where value != "" { }

我也看到过这个链接,但问题仍然存在 scroll when change无法找到

3 个答案:

答案 0 :(得分:4)

您需要重置else块中的默认图像,否则回收机制将重新使用旧图像。

@Override
public void onBindViewHolder(ViewHolder viewHolder, int pos) {

    String image = arraylist.get(pos).getImage();
    File imgFile = new  File(image);
       if(imgFile.exists()){
          viewHolder.ivProfile.setImageURI(Uri.fromFile(imgFile));
       } else {
         // here you set your default image, or you can just hide "viewHolder.ivProfile"
       }
}

答案 1 :(得分:0)

由于您在onBindViewHolder()收到了回收的观看次数,ImageView可能会包含之前初始化的数据,因此如果没有数据,您需要明确隐藏/清除ImageView对于当前项目:

@Override
public void onBindViewHolder(ViewHolder viewHolder, int pos) {
    String image = arraylist.get(pos).getImage();
    File imgFile = new  File(image);
    if(imgFile.exists()) {
        viewHolder.ivProfile.setImageURI(Uri.fromFile(imgFile));
    } else {
        viewHolder.ivProfile.setVisibility(View.INVISIBLE);
    }
}

答案 2 :(得分:0)

首先 当你在onBindViewHolder内写一个条件时,你必须在条件替代上写下你的动作。 如

if(condition){
    //Write your code for condition is true
}else{
    //Write your code if condition is false
}

你可能没有得到正确的结果只做这个... 因为第一次在onBindViewHolder显示视图时使用分配资源,第二次使用缓存...
在我的情况下,它发生了,
要解决这个问题,请编写以下代码...

@Override
public void onBindViewHolder(ViewHolder viewHolder, int pos) {
 //To stop recycle 
 holder.setIsRecyclable(false);

 //your code
 ...........

 //your conditional work
 if(condition){
    //Write your code for condition is true
 }else{
    //Write your code if condition is false
 }
}