CardView seleccionó el color de fondo en RecyclerView

estoy tratando de escribir un RecyclerView con CardViews y utilizando CAB tratando de eliminar varias tarjetas en la selección. ¿Cómo doy color de fondo a las tarjetas seleccionadas. Estoy tratando de usar statelistdrawable como el siguiente:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@color/primary_dark" /> <item android:drawable="@android:color/transparent" /> </selector> 

y aplicarlo al diseño CardView como:

 <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/card_view" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/statelist_item_background" card_view:cardCornerRadius="10dp" card_view:cardElevation="10dp" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/imageView" android:tag="image_tag" android:layout_width="72dp" android:layout_height="100dp" android:layout_margin="5dp" android:layout_weight="1" android:src="@drawable/one"/> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:layout_weight="2" android:orientation="vertical" > <TextView android:id="@+id/textViewName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge"/> <TextView android:id="@+id/textViewEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:text="Medium Text" android:textAppearance="?android:attr/textAppearanceMedium"/> </LinearLayout> </LinearLayout> </android.support.v7.widget.CardView> 

abajo está el código para mi adaptador

 public class modeladapter extends RecyclerView.Adapter<modeladapter.myholder> { ArrayList<MyModel> arraylist; SparseBooleanArray selecteditems; public modeladapter(ArrayList<MyModel> ar) { arraylist=ar; selecteditems=new SparseBooleanArray(); } public void removeData(int position) { arraylist.remove(position); notifyItemRemoved(position); } public MyModel getItem(int position) { return arraylist.get(position); } public void addData(MyModel newModelData, int position) { arraylist.add(position, newModelData); notifyItemInserted(position); } public void toggleSelection(int pos) { if (selecteditems.get(pos, false)) { selecteditems.delete(pos); } else { selecteditems.put(pos, true); } notifyItemChanged(pos); } public void clearSelections() { selecteditems.clear(); notifyDataSetChanged(); } public int getSelectedItemCount() { return selecteditems.size(); } public List<Integer> getSelectedItems() { List<Integer> items = new ArrayList<Integer>(selecteditems.size()); for (int i = 0; i < selecteditems.size(); i++) { items.add(selecteditems.keyAt(i)); } return items; } @Override public modeladapter.myholder onCreateViewHolder(ViewGroup viewGroup, int i) { LayoutInflater lf=LayoutInflater.from(viewGroup.getContext()); View v = lf.inflate(R.layout.card_lay, viewGroup, false); // v.setOnClickListener(Activity_Main.listener); myholder m=new myholder(v); return m; } @Override public void onBindViewHolder(modeladapter.myholder m, int i) { m.cimage.setImageResource(arraylist.get(i).url); m.email.setText(arraylist.get(i).email); m.name.setText(arraylist.get(i).name); m.itemView.setActivated(selecteditems.get(i,false)); } @Override public int getItemCount() {return (arraylist.size());} public static class myholder extends RecyclerView.ViewHolder { ImageView cimage; TextView name,email; public myholder(View itemView) { super(itemView); cimage= (ImageView) itemView.findViewById(R.id.imageView); name= (TextView) itemView.findViewById(R.id.textViewName); email= (TextView) itemView.findViewById(R.id.textViewEmail); if(itemView.isActivated()) itemView.setBackgroundColor(itemView.getContext().getResources().getColor(R.color.primary_dark)); else itemView.setBackgroundColor(Color.parseColor("#ffffff")); } } 

amablemente actualiza cómo puedo cambiar el color de fondo de artículos seleccionados. Gracias

No necesariamente necesita tener un StateListDrawable Necesita tener un método en su adaptador que comprueba las selecciones:

 sparseArray.valueAt(i).isSelected() 

A continuación, en su RecylcerView.Adapter , cambie:

 if (itemView.isActivated()) itemView.setBackgroundColor(itemView.getContext().getResources().getColor(R.color.primary_dark)); else itemView.setBackgroundColor(Color.parseColor("#ffffff")); 

Para (Necesita cambiar el cardView, no el itemView):

  viewHolder.cardView.setCardBackgroundColor(sparseArray.valueAt(i).isSelected() ? Color.LTGRAY : Color.WHITE); 

Para cualquier persona nueva en estos problemas, vale la pena señalar como de la biblioteca de soporte v24, el CardView ahora es compatible con un ColorStateList. (Nota: se trata de una lista de estado de color, no una lista de estado lista)

Aquí está el enlace: https://code.google.com/p/android/issues/detail?id=78198

 card_view:cardBackgroundColor="@color/statelist_item_background" 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.