在这里,我有从Firebase获取的recyclerview中的项目列表。 所以我正在尝试在用户单击它时更改其背景颜色。 但是当我单击项目 1 时,项目 4 的背景颜色也会更改。 如果单击项目 2,则项目8 颜色也。 它给出不正确的结果。
firebaseTimeadapter = new FirebaseRecyclerAdapter<TimeSlot, FirebaseTimeViewHolder>(
TimeSlot.class,
R.layout.time_slot_layout,
FirebaseTimeViewHolder.class,
timeSlot.child(Common.BikeId)) {
//variable to hold selected Item position
private int mSelectedItemPosition = -1;
@Override
protected void populateViewHolder(final FirebaseTimeViewHolder firebaseTimeViewHolder, TimeSlot slot, final int i) {
firebaseTimeViewHolder.time_slot.setText(slot.getTime_slot());
firebaseTimeViewHolder.txt_time_slot_description.setText(ConvertToAvailableorNotAvailable(slot.isAvailable()));
firebaseTimeViewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
firebaseTimeViewHolder.card_view_slot.setCardBackgroundColor(getResources().getColor(android.R.color.darker_gray));
firebaseTimeViewHolder.card_view_slot.setClickable(false);
firebaseTimeViewHolder.time_slot.setTextColor(getResources()
.getColor(android.R.color.white));
firebaseTimeViewHolder.txt_time_slot_description.setTextColor(getResources().getColor(android.R.color.white));
// firebaseTimeViewHolder.card_view_slot.setCardBackgroundColor(getResources().getColor(android.R.color.darker_gray));
date = new SimpleDateFormat("dd-MMM").format(new Date());
txt_from_date.setText(date + " " + slot.getTime_slot());
// Toast.makeText(BookingCalender.this, "Clicked" + slot.getTime_slot(), Toast.LENGTH_SHORT).show();
}
});
}
};
recycler_time_list.setAdapter(firebaseTimeadapter);
视图持有人类
public class FirebaseTimeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView time_slot,txt_time_slot_description;
public CardView card_view_slot;
private ItemClickListener itemClickListener;
public FirebaseTimeViewHolder(View itemView) {
super(itemView);
time_slot=(TextView)itemView.findViewById(R.id.time_slot);
txt_time_slot_description=(TextView)itemView.findViewById(R.id.txt_time_slot_description);
card_view_slot=(CardView)itemView.findViewById(R.id.card_time_slot);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener){
this.itemClickListener=itemClickListener;
}
@Override
public void onClick(View v) {
itemClickListener.onClick(v,getAdapterPosition(),false);
}
}
删除这个无意义的部分,只使用itemView.setOnClickListener()
:
private ItemClickListener itemClickListener;
public void setItemClickListener(ItemClickListener itemClickListener){
this.itemClickListener = itemClickListener;
}
这部分也很奇怪;在最好的情况下,它会导致无限循环:
itemClickListener.onClick(v, getAdapterPosition(), false);
这至少应该治愈将所有项目设置为同一侦听器引起的异常行为......
虽然我认为您可能正在寻找类似的东西androidx.recyclerview.selection
:
implementation "androidx.recyclerview:recyclerview:1.1.0"
implementation "androidx.recyclerview:recyclerview-selection:1.0.0"
请参阅"步骤 5:突出显示所选项目"下方的回收器视图选择指南。
尽管如此,人们可以通过数据绑定和数据库更好地保持选择。