回收器在项目单击中查看项目背景更改



在这里,我有从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:突出显示所选项目"下方的回收器视图选择指南。

尽管如此,人们可以通过数据绑定和数据库更好地保持选择。

最新更新