【问题标题】:Recycle view getting change while scrolling滚动时回收视图发生变化
【发布时间】:2016-01-27 08:39:20
【问题描述】:

我正在尝试动态更改 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();
    }
}

如何防止回收视图被回收?

【问题讨论】:

标签: android android-recyclerview


【解决方案1】:

请试试这个:

如果您使用的是RecycyclerView,请仅覆盖getItemViewType 方法。

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

【讨论】:

  • 太棒了...就在我想转回列表视图的时候..谢谢伙计.. :)
  • 太棒了 thnxxxxx
【解决方案2】:

请更改

@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 void onBindViewHolder(RecyclerViewHolders holder, int position) {
        holder.countryName.setText(itemList.get(position).getName());
         holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
    }
}

如果你真的需要 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 可以将数据绑定到它

【讨论】:

  • 请提供一些描述
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多