我有一个信用卡recyclerview,如果您点击一个我想要它更改该背景资源,并使其他所有其他回到默认值,出于某种原因我一直在为此奋斗了大约5个小时,并且无法正确理解。recyclerview,单击突出显示并使其他人不突出
这里是失败类
public class CheckOutCardRecycler extends RecyclerView.Adapter<CheckOutCardRecycler.CardViewHolder>{
private List<Card> checkOutCard;
private int screenWidth;
private int selected;
public CheckOutCardRecycler(Activity activity, List<Card> checkOutCard){
Display display = activity.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
this.screenWidth = size.x;
this.checkOutCard = checkOutCard;
selected=-1;
}
public static class CardViewHolder extends RecyclerView.ViewHolder {
CardView card;
LinearLayout row;
static TextView etCardNumber;
static TextView etName;
static TextView etDate;
static LinearLayout creditCard;
CardViewHolder(View itemView) {
super(itemView);
card = (CardView)itemView.findViewById(R.id.card_view);
etCardNumber = (TextView)itemView.findViewById(R.id.etCardNumber);
etName = (TextView)itemView.findViewById(R.id.etName);
etDate = (TextView)itemView.findViewById(R.id.etDate);
creditCard = (LinearLayout) itemView.findViewById(R.id.creditCard);
}
}
@Override
public int getItemCount() {
return checkOutCard.size();
}
public int getSelected() {
return selected;
}
public int getPaymentMethod(int i) {
return Integer.parseInt(checkOutCard.get(i).getId());
}
@Override
public CardViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_checkout_cards, viewGroup, false);
CardViewHolder pvh = new CardViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(final CardViewHolder cardViewHolder, final int i) {
CardViewHolder.etCardNumber.setText("**** **** **** " + checkOutCard.get(i).getLast_four_digits());
CardViewHolder.etName.setText(checkOutCard.get(i).getName());
CardViewHolder.etDate.setText(checkOutCard.get(i).getExpiry_month() +"/"+checkOutCard.get(i).getExpiry_year().substring(2,4));
if (selected<0)
if (checkOutCard.get(i).getDefaultcard()==1){
selected=i;
}
CardViewHolder.creditCard.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (i!=selected) {
checkOutCard.get(selected).setDefaultcard(0);
checkOutCard.get(i).setDefaultcard(1);
selected=-1;
notifyDataSetChanged();
}
}
});
if (selected==i){
if (checkOutCard.get(i).getBrand().toLowerCase().equals("visa"))
CardViewHolder.creditCard.setBackgroundResource(R.drawable.paymentscreenvisaselected);
else if (checkOutCard.get(i).getBrand().toLowerCase().equals("mastercard"))
CardViewHolder.creditCard.setBackgroundResource(R.drawable.paymentscreenmastercardselected);
else
CardViewHolder.creditCard.setBackgroundResource(R.drawable.paymentscreenselected);
}
else {
if (checkOutCard.get(i).getBrand().toLowerCase().equals("visa"))
CardViewHolder.creditCard.setBackgroundResource(R.drawable.paymentscreenvisa);
else if (checkOutCard.get(i).getBrand().toLowerCase().equals("mastercard"))
CardViewHolder.creditCard.setBackgroundResource(R.drawable.paymentscreenmastercard);
else
CardViewHolder.creditCard.setBackgroundResource(R.drawable.paymentscreen);
}
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
}
作出长时间的答案,你可以一次突出多个? – JCDecary
没有一个。它实质上是选定的卡 –
尽管您可以在ViewHolder的构造函数中执行相同操作,但不要在onBindViewHolder中附加clicklistener。这样你就不需要随着用户的滚动而连接一个监听器。我在答案中增加了一个工作解决方案。希望你觉得它有用。 – user1841702