Recyclerview itemclick中的项目背景更改

问题描述 投票:0回答:1

这里我有从firebase提取的recyclerview中的项目列表。所以我试图在用户单击它时更改其背景颜色。但是,当我单击项目1时,项目4的背景色也会变。如果单击项目2,则其更改的其他项目颜色也会更改。结果不正确。

    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);

}

}
android firebase android-recyclerview recycler-adapter
1个回答
0
投票

删除此无意义的部分,只需使用itemView.setOnClickListener()

private ItemClickListener itemClickListener;
public void setItemClickListener(ItemClickListener itemClickListener){
    this.itemClickListener = itemClickListener;
}

这至少应该解决由于将所有项目设置为同一听众而导致的异常行为...


虽然我认为您可能正在寻找类似的androidx.recyclerview.selection

androidx.recyclerview.selection

这是一个附加的依赖项,将适合此用例。

另请参见implementation "androidx.recyclerview:recyclerview:1.1.0" implementation "androidx.recyclerview:recyclerview-selection:1.0.0"

© www.soinside.com 2019 - 2024. All rights reserved.