这是我的代码
当我向上和向下滚动时,即使在那些位置图像路径不存在的情况下,图像也会添加到其他位置。假设图像路径位于1,2和3位置,但它也显示4,10,15位置的图像等
for value in mySequence where value != "" { }
我也看到过这个链接,但问题仍然存在 scroll when change无法找到
答案 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
}
}