如何在Recycler View项单击时取消选择其他位置的值?

3
我已经编写了以下代码,以便在recyclerview点击时更改所选项目的背景:
 @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);
            }
        });

    }

现在这个功能已经可以使用了。当我点击RecyclerView中的一个项目时,它会改变背景色,但是我希望这样:当我点击RecyclerView中的任何一个特定项目时,所有其他项目必须取消选择并将它们的背景更改为红色。
我只想提供单选选项。
我该如何实现这个功能?
2个回答

4
使用变量来保存所选元素的索引。 例如:
@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);
}

1

试试这个:

@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();
        }
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接