user3997016
user3997016

Reputation:

How to deselect all other's positions value on recycler view item click?

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

Answers (2)

isamirkhaan1
isamirkhaan1

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

prashant17
prashant17

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

Related Questions