Ich versuche, die Farbe (Grün) von RecyclerView CardView Hintergrund zu ändern, wenn auf RecylerView Element klickt, wenn ich auf das nächste Element von RecyclerView klicken, dann muss der vorherige Artikel geändert werden/kommt zu seiner ursprünglichen Farbe (Pink), und ausgewählte Elementfarbe wäre Änderung, das heißt Grün. Kann mir jemand die passende Lösung dafür geben?RecyclerView Cardview Artikel Hintergrundfarbe ändern, wenn auf sein Element klicken
Mein Class-:
public class RecylerAdapter extends RecyclerView.Adapter<RecylerAdapter.ViewHolder>
{ private boolean isSelected;
private final static int FADE_DURATION = 500;// milliseconds
private int lastPosition = -1;
Context cont;
private String[] strname;
private int[] icon;
public RecylerAdapter(Context con, String[] androidNames, int[] androidIcon)
{ cont=con;
strname=androidNames;
icon=androidIcon;
}
class ViewHolder extends RecyclerView.ViewHolder
{ private ImageView imgView;
private TextView txtView;
private CardView cardView;
private SparseBooleanArray selectedItems = new SparseBooleanArray();
public ViewHolder(final View itemView)
{
super(itemView);
imgView = (ImageView) itemView.findViewById(R.id.imageView);
txtView = (TextView) itemView.findViewById(R.id.txt);
cardView = (CardView) itemView.findViewById(R.id.cv12);
itemView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
cardView.isSelected = !cardView.isSelected;
notifyDataSetChanged();
}
});
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout,parent,false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onBindViewHolder(ViewHolder holder, int i)
{
if(ViewHolder.isSelected)
{
holder.cardView.setBackground(Color.Green);
}
else{
holder.cardView.setBackground(Color.Pink);
}
holder.txtView.setText(strname[i]);
holder.imgView.setImageResource(icon[i]);
setAnimation(holder.cardView, i);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void setAnimation(View viewToAnimate, int position)
{
// If the bound view wasn't previously displayed on screen, it's animated
if (position > lastPosition)
{
//animation 1
AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(FADE_DURATION);
viewToAnimate.startAnimation(anim);
//animation 2
Animation animation = AnimationUtils.loadAnimation(cont, android.R.anim.slide_in_left);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
else
{
Animation animation = AnimationUtils.loadAnimation(cont, android.R.anim.slide_in_left);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
}
@Override
public int getItemCount()
{
return strname.length;
}
public void setSelected(boolean selection){
this.isSelected = selection;
}
public boolean isSelected(){
return isSelected;
}
}
ein anderes Feld in der Modellklasse hinzufügen wie boolean oder colorname, und Onclick Artikel Hörer ändern Farbwert dieses Elements –
@Divyesh .. 'if (selectedItems.get (getAdapterPosition(), false)) { selectedItems.delete (getAdapterPosition()); cardView.setCardBackgroundColor (Color.GREEN); } else { selectedItems.put (getAdapterPosition(), true); cardView.setCardBackgroundColor (Color.BLUE); } } 'Ich habe versucht, diese Logik –
Dafür müssen Sie eine weitere boolean in Ihrer Model-Klasse von List verwalten. Überprüfen Sie die Antwort von readyandroid unten. –