我试图在我的应用中实现多选功能。这工作正常,但当我在应用程序上选择一张卡并向下滚动RecyclerView
时,问题就出现了,列表中的第四项已经被选中。这就是我的onBindViewHolder的样子:
holder.rvPictureContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
model.setSelected(!model.getSelected());
holder.rvPictureContainer.setCardBackgroundColor(model.getSelected() ? ContextCompat.getColor(ctx, R.color.colorAccent) : Color.WHITE);
}
});
这是我的模特:
public class PictureModel {
private String imgURL, imgTitle, imgAuthor;
private Boolean isSelected = false;
public PictureModel(String imgURL, String imgTitle, String imgAuthor) {
this.imgURL = imgURL;
this.imgTitle = imgTitle;
this.imgAuthor = imgAuthor;
}
public String getImgURL() {
return imgURL;
}
public String getImgTitle() {
return imgTitle;
}
public String getImgAuthor() {
return imgAuthor;
}
public void setSelected(Boolean selected) {
isSelected = selected;
}
public Boolean getSelected() {
return isSelected;
}
}
答案 0 :(得分:2)
由于recycleler视图重用了单元格,因此需要清除它正在重用的单元格的状态。您可以通过在onBindViewHolder
上设置单元格的当前状态来实现。例:
public void onBindViewHolder(YourViewHolder holder, int position, List<Object> payloads) {
YourModel model = items[position]
holder.setup(model)
}
在setup
内,确保为该单元格设置正确的状态。
在您的情况下,这意味着设置正确的选定状态。
我希望这会有所帮助。