我有一个回收者视图,在onClick(View view)
里面我将背景颜色改为几乎透明的红色view.setBackgroundColor(Color.argb(64, 183, 28, 28));
但是有些奇怪的事情正在发生,当我向下滚动时,我看到尚未点击的物品的颜色已经改变,我的猜测是当物品被回收时它保留了颜色。我想删除那种颜色,但是在持有者的构造函数中删除它是不行的,所以我的问题是我该如何去做?
编辑:评论后这是更详细的代码
public class GridHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView Name;
public ImageView Photo;
public GridHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
Name = (TextView) itemView.findViewById(R.id.name);
Photo = (ImageView) itemView.findViewById(R.id.photo);
itemView.setClickable(true);
}
@Override
public void onClick(View view) {
view.setBackgroundColor(Color.argb(64, 183, 28, 28));
}
}
答案 0 :(得分:1)
在我看来,实现这一目标的最简单方法是给RecyclerView中的每个项目一个状态(布尔值)并根据状态设置背景。这样,当您回收视图时,将绘制正确的背景。
if(isClicked){
itemView.setBackgroundColor(Color.RED);
}
else{
itemView.setBackgroudnColor(Color.WHITE);
}
答案 1 :(得分:1)
您应该在onBindViewHolder()
中设置所有属性,因为正如您所看到的,视图可能不是新鲜的,但可以回收并显示以前显示的记录状态。因此,如果背景颜色匹配,则必须在onBindViewHolder()
中设置它。
答案 2 :(得分:1)
您需要在ViewHolder外部保持背景颜色的状态(可能在适配器或更高版本中)。然后,在适配器的onBindViewHolder中,根据该状态设置ViewHolder的背景颜色。