我已尝试this以及holder.setIsRecyclable(false);
但我无法保持观点的背景
后的观点任何指导都会很棒
编辑:代码
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"));
}
}
});
答案 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"));
}
}
});
}