Cómo cambiar el color de fondo de los elementos seleccionados en ListView?

he visto muchas preguntas simillar y cada respuesta es muy específica para el problema y no una respuesta directa, o encontré tutoriales que muestran cómo crear una casilla de verificación que está marcada en los elementos seleccionados. Y estoy teniendo problemas para entender cómo hacerlo de esos códigos.

Estoy siguiendo un tutorial encontrado aquí , y eso es preaty mucho cómo mi código se ve sólo nombres diferentes.

Quiero tener una selección multipila ListView, cuando un artículo seleccionado el color de fondo se cambia para marcar los artículos que he seleccionado.

¿Puedo quizá realizar esto usando un selector de encargo? Entendí que la forma común es guardar las posiciones de selected y hacer algo en la función getView. Vi gente creando ViewHolder, pero realmente no entendí lo que tiene que ver con nada. ¿Puede alguien por favor ayudarme?

Gracias de antemano, Eric

Bueno, finalmente lo resolví, espero que esto ayude a alguien:

Lo que hice fue crear un ArrayList<Integer> que almacena toda la posición de los elementos seleccionados, y alternar los colores de fondo en los clics.

En mi adaptador defino:

 public ArrayList<Integer> selectedIds = new ArrayList<Integer>(); 

Con el siguiente método:

  public void toggleSelected(Integer position) { if(selectedIds.contains(position)) { selectedIds.remove(position); } else { selectedIds.add(position); } } 

que agrega \ elimina elementos de ArrayList

En mi método getView:

  if (selectedIds.contains(position)) { convertView.setSelected(true); convertView.setPressed(true); convertView.setBackgroundColor(Color.parseColor("#FF9912")); } else { convertView.setSelected(false); convertView.setPressed(false); convertView.setBackgroundColor(Color.parseColor("#000000")); } 

Esto comprueba si la posición se almacena en ArrayList. si lo hace, pintarlo como seleccionado. si no, lo contrario.

todo queda es el oyente de OnItemClick, añadí:

  ((YourAdapter)list.getAdapter()).toggleSelected(new Integer(position)); 

Cuando YourAdapter es el adaptador de su ListView

Espero que esto ayude a cualquiera, ya que es una respuesta genérica 🙂

También puede configurar el siguiente selector como fondo para el diseño del elemento de lista:

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

Fuente: Fondo de elemento ListView mediante selector personalizado

Hay una simple solución XML. La sintaxis a continuación es WRT API 15. He utilizado la siguiente plantilla de elemento de lista:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/item_selection"> <ImageView /> <.. /> </LinearLayout> 

Señala el archivo item_selection.xml en res / drawable-hdpi (en Android Studio 0.8.14):

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/holo_blue_dark" android:state_selected="true" /> </selector> 
  • Lotes de GC cuando se desplaza ListView (con el patrón de titular)
  • Vaciar ListView dentro de ScrollView como dos Fragmentos
  • Android - ListView para cargar más elementos al llegar al final
  • Android: detecta si un ListView tiene la barra de desplazamiento (después de configurar nuevos datos)
  • Color de fondo ondulado de Android
  • Efecto de botón de diapositiva en el elemento de vista de lista para Android
  • Utilizar AsyncTask para cargar imágenes en ListView
  • Android Listview Medir altura
  • Sincronizar todo el ListView en un ViewPager
  • Cómo implementar un ListView completamente dentro de un ScrollView
  • ListView sin ListActivity
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.