Изменение фона элементов Recycler в щелчке по элементам - PullRequest
0 голосов
/ 09 января 2020

Здесь у меня есть список предметов в утилитаре, который загружается из базы. поэтому я пытаюсь изменить его цвет фона, когда пользователь нажимает на него. но когда я нажимаю на элемент 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);

}

}

1 Ответ

0 голосов
/ 09 января 2020

Удалите эту бессмысленную часть и просто используйте itemView.setOnClickListener():

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

Также эта часть довольно странная; в лучшем случае это приведет к бесконечному l oop:

itemClickListener.onClick(v, getAdapterPosition(), false);

Это должно по крайней мере вылечить ненормальное поведение, вызванное установкой всех элементов на одного слушателя ...


Хотя я думаю, что вы, возможно, ищете что-то похожее androidx.recyclerview.selection:

implementation "androidx.recyclerview:recyclerview:1.1.0"
implementation "androidx.recyclerview:recyclerview-selection:1.0.0"

См. Руководство по выбору утилизатора , ниже "Шаг 5: Выделение выбранные элементы ".

Тем не менее, можно лучше сохранить выделение с помощью привязки данных и базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...