回收的recyerview项目保持旧的背景颜色

时间:2016-05-09 17:39:58

标签: android background android-recyclerview

我有一个回收者视图,在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));
        }
    }

3 个答案:

答案 0 :(得分:1)

在我看来,实现这一目标的最简单方法是给RecyclerView中的每个项目一个状态(布尔值)并根据状态设置背景。这样,当您回收视图时,将绘制正确的背景。

if(isClicked){
    itemView.setBackgroundColor(Color.RED);
}
else{
    itemView.setBackgroudnColor(Color.WHITE);
}

答案 1 :(得分:1)

您应该在onBindViewHolder()中设置所有属性,因为正如您所看到的,视图可能不是新鲜的,但可以回收并显示以前显示的记录状态。因此,如果背景颜色匹配,则必须在onBindViewHolder()中设置它。

答案 2 :(得分:1)

您需要在ViewHolder外部保持背景颜色的状态(可能在适配器或更高版本中)。然后,在适配器的onBindViewHolder中,根据该状态设置ViewHolder的背景颜色。