Android 循环视图在滚动时获取更改

Android 循环视图在滚动时获取更改,android,android-recyclerview,Android,Android Recyclerview,我正在尝试动态更改RecycleView中的图像。它将被成功更改,但当我滚动RecycleView ImageView时,它将被更改 以下是我的适配器类代码: public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> { private List<ItemObject> itemList; private Context context; O

我正在尝试动态更改RecycleView中的图像。它将被成功更改,但当我滚动RecycleView ImageView时,它将被更改

以下是我的适配器类代码:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
    private List<ItemObject> itemList;
    private Context context;
    OnGridSelected onGridObj;
    public RecyclerViewAdapter(Context context, List<ItemObject> itemList,OnGridSelected onGridObj) {
        this.itemList = itemList;
        this.context = context;
        this.onGridObj = onGridObj;
    }
    @Override
    public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null);
        RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView,itemList,onGridObj);
        return rcv;
    }
    @Override
    public void onBindViewHolder(RecyclerViewHolders holder, int position) {
        if(!itemList.get(position).isSelected()) {
            holder.countryName.setText(itemList.get(position).getName());
            holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
            itemList.get(position).setIsSelected(true);
        }
    }
    @Override
    public int getItemCount() {
        return this.itemList.size();
    }
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
私人清单项目清单;
私人语境;
onGridObj;
公共RecycleServiceAdapter(上下文上下文、列表项列表、OnGridSelected onGridObj){
this.itemList=itemList;
this.context=上下文;
this.onGridObj=onGridObj;
}
@凌驾
public RecycleServiceWholders onCreateViewHolder(视图组父级,int-viewType){
View layoutView=LayoutFlater.from(parent.getContext()).flate(R.layout.card\u View\u list,null);
RecyclerViewWholders rcv=新的RecyclerViewWholders(layoutView、itemList、onGridObj);
返回rcv;
}
@凌驾
BindViewHolder上的公共无效(RecyclerViewHolder,int位置){
如果(!itemList.get(position).isSelected()){
holder.countryName.setText(itemList.get(position.getName());
holder.countryPhoto.setImageResource(itemList.get(position.getPhoto());
itemList.get(position).setIsSelected(true);
}
}
@凌驾
public int getItemCount(){
返回此.itemList.size();
}
}
如何防止回收视图被回收?

请更改

@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
    if(!itemList.get(position).isSelected()) {
        holder.countryName.setText(itemList.get(position).getName());
        holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
        itemList.get(position).setIsSelected(true);
    }
}

如果您真的需要isSelected标志,请使用:-

@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
    if(!itemList.get(position).isSelected()) {
        holder.countryName.setText(itemList.get(position).getName());
        holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
        itemList.get(position).setIsSelected(true);
    }else {
// specify here what to do when is selected is true
}
}
由于每次在屏幕上显示视图时都会调用onBindViewHolder,因此如果isSelected为true,则永远不会进入if状态,因此当recyclerview重用视图时,旧数据将可见,因此您应该指定isSelected为true时应执行的操作,以便recyclerview可以将数据绑定到它

@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
    if(!itemList.get(position).isSelected()) {
        holder.countryName.setText(itemList.get(position).getName());
        holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
        itemList.get(position).setIsSelected(true);
    }
}

如果您真的需要isSelected标志,请使用:-

@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
    if(!itemList.get(position).isSelected()) {
        holder.countryName.setText(itemList.get(position).getName());
        holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
        itemList.get(position).setIsSelected(true);
    }else {
// specify here what to do when is selected is true
}
}
由于每次在屏幕上显示视图时都会调用onBindViewHolder,因此如果isSelected为true,则永远不会进入if状态,因此当recyclerview重用视图时,旧数据将可见,因此u应指定isSelected为true时应执行的操作,以便recyclerview可以将数据绑定到该视图

请尝试以下操作:

如果您使用的是
RecycyclerView
,请仅重写
getItemViewType
方法

@Override
public int getItemViewType(int position) {
    return position;
}
请试试这个:

如果您使用的是
RecycyclerView
,请仅重写
getItemViewType
方法

@Override
public int getItemViewType(int position) {
    return position;
}

@IntelliJAmiya我在模型中设置了标志,但它不起作用。@IntelliJAmiya我在模型中设置了标志,但它不起作用。请提供一些说明请提供一些说明Wesome。。。就在我想回到ListView的时候。。谢谢你,伙计……)真棒Thnxxxxx真棒。。。就在我想回到ListView的时候。。谢谢你,伙计……)真棒Thnxxx