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.
- Obtener el elemento seleccionado al hacer doble clic en el elemento de lista
- Manera fácil de agregar imágenes a un ListView de Android
- Eliminar lista de elementos con Diapositiva, como Gmail
- ListView negro onScroll
- Android: lista vacía en la vista Lista personalizada
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
- Android: diseño predeterminado para listitem que contiene el título y el subtítulo
- ¿Cómo reproducir varios vídeos en una vista de lista con MediaPlayer?
- android: listview: consigue el valor del cursor en el elemento click
- Aumentar dinámicamente el número de elementos en una vista de lista
- Cómo extraer objetos de ListView - getItemAtPosition no funcionará
- Configurar RecyclerView para trabajar como chat
- ¿Cómo hacer ListView personalizado con fondos de colores de los elementos?
- Cómo cambiar el nombre del nombre de Listview Después de enviar una solicitud de servidor dentro de una clase de adaptador personalizado?
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>
- Android – BroadcastReceiver unregisterReceiver issue (not registered)
- ¿Cuál es la diferencia entre programar la misma tarea usando el administrador de alarmas vs ScheduledExecutorService