Изменить фон элемента на элементе RecyclerView - PullRequest
0 голосов
/ 29 мая 2019

Я хочу сделать кликабельный предмет из моего RecyclerView. Однако это не работает. item_background.xml определено хорошо, оно работает в других частях моего проекта. Однако в этом случае у меня есть больше элементов в LinearLayout, которые содержат onClick слушателей. Когда я нажимаю item, фон не изменяется. Пожалуйста, смотрите код ниже.

Вместо этого я не могу установить фон для внутренних элементов, потому что мне нужен весь элемент для изменения цвета фона, а не только части.

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:background="@drawable/item_background"
    android:clickable="true"
    ...
    >

    <TextView
        <!-- NO BACKGROUND -->
        ... />

    <ImageView
        <!-- NO BACKGROUND -->
        ... />

    ...

</LinearLayout>

item_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/darker_gray" android:state_pressed="true"/>
    <item android:drawable="@android:color/darker_gray" android:state_focused="true"/>
    <item android:drawable="@android:color/transparent"/>
</selector>

1 Ответ

0 голосов
/ 29 мая 2019

Чтобы изменить фон или выделить выбранный элемент в recyclerview, вы можете попробовать это

public class AdapterClass extends RecyclerView.Adapter<AdapterClass.ViewHolder> {
        private int selected_position = -1;

        @Override
        public void onBindViewHolder(PlacesLocationAdapter.ViewHolder holder, final int position) {
            if (selected_position == position) {
                // do your stuff here like
                //Change selected item background 
               parentLayout.setBackgroundColor(Color.parse("darkgraycolorcode"));

            } else {
                  // do your stuff here like
                  //Change  unselected item background 
                   parentLayout.setBackgroundColor(Color.TRANSPARENT);
            }
  // rest of the code here

    holder.linelayout.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              if(selected_position==position){
                        selected_position=-1;
                        notifyDataSetChanged();
                        return;
                    }
                    selected_position = position;
                    notifyDataSetChanged();

            }
        });

    //rest of the code here

     }


}

Также вы можете определить прослушиватель щелчков родительской компоновки, т. Е. Linearlayout в держателе представления также

...