RecyclerView更改视图

时间:2016-11-14 15:59:37

标签: android android-recyclerview

我已尝试this以及holder.setIsRecyclable(false);

但我无法保持观点的背景

这是我选择enter image description here

后的观点

当我滚动它时会丢失视图enter image description here

任何指导都会很棒

编辑:代码

    holder.setIsRecyclable(false);

    final GradientDrawable gd2=new GradientDrawable();
    gd2.setShape(GradientDrawable.OVAL);
    gd2.setSize(24,24);
    gd2.setStroke(2, Color.parseColor("#5FB382"));
    final GradientDrawable gd = new GradientDrawable();
    gd.setShape(GradientDrawable.OVAL);
    gd.setStroke(2, Color.parseColor("#FBAA35"));
    gd.setSize(24,24);

    holder.favorite.setTextColor(Color.parseColor("#FBAA35"));
    holder.hatIcon.setTextColor(Color.parseColor("#5FB382"));
    holder.hatIcon.getCurrentTextColor();
    holder.hatIcon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (holder.hatIcon.getCurrentTextColor() == Color.parseColor("#5FB382")) {

                    holder.hatIcon.setTextColor(Color.parseColor("#ffffff"));
               holder.hatIcon.setBackgroundColor(Color.parseColor("#5FB382"));
                gd2.setColor(Color.parseColor("#5FB382"));
            }
            else {
                Debug.e();
                holder.hatIcon.setTextColor(Color.parseColor("#5FB382"));
                gd2.setColor(Color.parseColor("#ffffff"));
            }
        }
    });

1 个答案:

答案 0 :(得分:2)

通过数据模型返回视图,或使用标记,以便在重新使用视图时回收不会更改列表的显示。

您也可以通过向持有者类添加一个布尔值来执行此操作,如下所示:

class Holder extends RecyclerView.ViewHolder{
    boolean isSelected = false;
    //... other view declaration and constructor
}

然后使用此标志确定选择状态:

public void onBindViewHolder(Holder holder, int position) {

  // check if holder.isSelected

  if(holder.isSelected){

      // Selected state
      holder.hatIcon.setTextColor(Color.parseColor("#5FB382"));

  }else{
      // non- selected state
       holder.hatIcon.setTextColor(Color.parseColor("#ffffff"));
       holder.hatIcon.setBackgroundColor(Color.parseColor("#5FB382"));
  }

 // listener for the selection state change
 holder.hatIcon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (holder.isSelected) {

                holder.isSelected = false;
                    holder.hatIcon.setTextColor(Color.parseColor("#ffffff"));
               holder.hatIcon.setBackgroundColor(Color.parseColor("#5FB382"));
                gd2.setColor(Color.parseColor("#5FB382"));
            }
            else {
                holder.isSelected = true;
                Debug.e();
                holder.hatIcon.setTextColor(Color.parseColor("#5FB382"));
                gd2.setColor(Color.parseColor("#ffffff"));
            }
        }
    });
}