¿Cómo configuro una imagen de fondo para cada elemento de ListView en Android?

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="6dip" android:src="@drawable/icon" /> <LinearLayout android:orientation="vertical" android:layout_width="0dip" android:layout_weight="1" android:layout_height="fill_parent"> <TextView android:id="@+id/toptext" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:gravity="center_vertical" android:textStyle="bold" /> <TextView android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:id="@+id/bottomtext" android:singleLine="false" /> </LinearLayout> </LinearLayout> 

Esta es mi fila actual. Si creé un .JPEG, y quiero que sea para cada elemento … ¿cómo cambiaría este archivo .xml? ¿Dónde pondría la imagen? ¿En Activos?

Si desea tener fondos individuales para cada elemento de lista, debe declarar su propio Adaptador personalizado.

Derivalo de BaseAdapter y la parte más importante a implementar es el getView(int, View, ViewGroup) .

Debe entender cómo android vuelve a usar elementos de elementos de lista ya existentes cuando se desplaza por una lista. Esto significa: en cualquier momento en el tiempo, habrá sólo tantos puntos de vista generados como se pueden ver en pantalla simultáneamente.

Esta estrategia óptima de no generar demasiadas vistas en conjunto conduce al problema de que tendrá que establecer el fondo para cada elemento de lista de acuerdo con su posición currenty necesaria cuando getView se llama. Si intenta establecer el fondo de forma estática sólo al generar la vista, volverá a aparecer de nuevo posiblemente unido al elemento equivocado.

El método getView trae un "convertView" como segundo parámetro o no (null). Si su método se llama con un convertidor definido en algo, que significa: "reutilizar esta vista para el elemento que se requiere ahora mismo".

La técnica utilizada aquí está muy bien descrita en las demostraciones API (sección de listas) y también hay un blog de video para eso.

He aquí cómo se puede hacer:

 public class MyAdapter extends BaseAdapter { public View getView(int position, View convertView, ViewGroup parent) { // position is the element's id to use // convertView is either null -> create a new view for this element! // or not null -> re-use this given view for element! // parent is the listview all the elements are in if (convertView == null) { convertView = mInflater.inflate(R.layout.your_layout, null); // here you must do whatever is needed to populate the elements of your // list element layout ... } else { // re-use the given convert view // here you must set all the elements to the required values } // your drawable here for this element convertView.setBackground( ... ); // maybe here's more to do with the view return convertView; } } 

Eso es básicamente. Si sólo hay unos cuantos dibujos de fondo que posiblemente almacenar en caché, así que no tiene que leer los recursos una y otra vez!

¡Que te diviertas!

¿Quieres una vista de lista donde cada fila tenía su propio fondo, como el de abajo?

texto alternativo

En su código, lo más probable sería establecer un ListAdapter en la vista. Varios de los adaptadores que puede construir toman un argumento de presentación o vista. Solo tendrías que configurar la propiedad android: background para la vista a la que apuntas.

Por ejemplo, podría tener un ArrayAdapter creado de esta manera:

 new ArrayAdapter<String>(context, R.layout.item, R.id.itemName); 

Por supuesto, utilizo el setAdapter de ListView con este adaptador. En mi archivo item.xml , puedo definir el itemname de vista de texto como este:

 <TextView android:id="@+id/itemName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test view" android:background="@drawable/add"/> 

Sin embargo, no creo que todos los tipos de ListAdapter tiene un constructor con esa característica. Compruebe la documentación para el tipo de ListAdapter que está utilizando. Si está usando uno sin este constructor, creo que puede tener que subclase el adaptador y reemplazar el getView del adaptador para inflar su vista desde su archivo XML.

Tengo la imagen add.png en cada una de las carpetas res / drawable .

  • Android Firebase 2.4 IllegalStateException utilizando nuevo ref.updateChildren ()
  • Restaurar la pila de aplicaciones de Android desde el fondo
  • Problemas de repetición de AudioTrack de Android en MODE_STATIC
  • Horizontal ListView con animación en android
  • Mejorando la velocidad de getpixel () y setpixel () en Android Bitmap
  • Subir varios archivos de Android a AppEngine en 1 solicitud
  • Descarga de hojas de cálculo de Google Sheets desde Google Drive en Android
  • SSLHandshakeException Ancla de confianza para ruta de certificación no encontrada Android HTTPS
  • Costumize android Fecha como twitter y feed de noticias de instagram
  • Android: adb shell, no se encontró ningún comando adb
  • Biblioteca de visor de PDF de Android o tutoriales de biblioteca de muPDF
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.