Reputation:
I have written following code to change background of selected item from recyclerview click :
@Override
public void onBindViewHolder(final ProductAdapter.CardViewHolder cardViewHolder, final int position) {
final Product product = mProduct.get(position);
cardViewHolder.pName.setText(product.getName());
cardViewHolder.cardProduct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
product.setSelected(!product.isSelected());
cardViewHolder.view.setBackgroundColor(product.isSelected() ? getContext().getResources().getColor(R.color.blue) : Color.red);
}
});
}
Now this is working. When i click on recycler view item then its change background color but i want like When i click on any particular item from recyclerview then all other item must be deselect and change their background to red.
I just want to give sing selection option.
How can i do this ?
Upvotes: 3
Views: 4192
Reputation: 759
Use a variable to keep an index of the selected element. e.g:
@Override
public void onBindViewHolder(final ProductAdapter.CardViewHolder cardViewHolder, final int position) {
final Product product = mProduct.get(position);
cardViewHolder.pName.setText(product.getName());
cardViewHolder.cardProduct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedItemId = product.getId();
notifyDataSetChanged();
}
});
if(product.getItemId()== selectedItemId )
((CVH)holder).itemView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
else
((CVH)holder).itemView.setBackgroundColor(Color.WHITE);
}
Upvotes: 4
Reputation: 1550
Try this:
@Override
public void onBindViewHolder(ProductAdapter.CardViewHolder cardViewHolder, final int position) {
Product product = mProduct.get(position);
cardViewHolder.pName.setText(product.getName());
if (product.isSelected()) {
ardViewHolder.view.setBackgroundColor(context.getResources().getColor(R.color.blue));
} else {
ardViewHolder.view.setBackgroundColor(context.getResources().getColor(R.color.Red));
}
cardViewHolder.cardProduct.setTag(position);
cardViewHolder.cardProduct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = (int) view.getTag();
for (int i = 0; i < mProduct.size; i++) {
Product product = mProduct.get(i);
if (i != pos) {
product.setSelcted(false);
} else {
product.setSelcted(true);
}
}
notifyDataSetChanged();
}
});
}
Upvotes: 1