---
title: ListView de Android en pocas líneas
url: https://jarroba.com/listview-de-android-en-pocas-lineas/
author: Ramón Invarato
date: 2013-11-02
modified: 2026-10-21
language: es
license: CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/) — attribution: "ListView de Android en pocas líneas", Ramón Invarato, jarroba.com
categories: Aplicaciones Móviles
---

# ListView de Android en pocas líneas

> Crea un listado en Android con muy poco código usando ListActivity, MatrixCursor y SimpleCursorAdapter, y detecta el clic en cada elemento de la lista.

En este listado no voy a explayarme tanto como en el [artículo completo de listado que te recomiendo que leas si no es antes, después de este](https://jarroba.com/listview-o-listado-en-android/); para que entiendas todos los entresijos de cómo se diseña un listado de arriba a abajo, cómo hacer un adaptador propio, un listado en Layout XML, poder diferenciar cada fila y así realizar tareas diferentes en cada una a la que se montan en el listado. No, aquí no, aquí haremos lo contrario. Vamos a hacer un listado de otra manera, voy a exponerte cómo se realiza un listado con el menos código posible y de la manera más sencilla. Aprovecharemos un montón de clases del API de Android, así escribiremos muy poco código. Vamos a realizar el mismo ejemplo del listado del link anterior, pero abstrayéndonos de muchos aspectos que harán que quede un código muy limpio y claro. Tendremos el mismo listado de pájaros:

 

[![Ejemplo de listado final seleccionado un elemento - www.jarroba.com](https://jarroba.com/wp-content/uploads/2013/02/Ejemplo-de-listado-final-seleccionado-un-elemento-www.jarroba.com_.png)](https://jarroba.com/wp-content/uploads/2013/02/Ejemplo-de-listado-final-seleccionado-un-elemento-www.jarroba.com_.png)

 

Que al pulsar muestre el contenido del elemento seleccionado.

 

[![Ejemplo de listado final seleccionado un elemento 2 - www.jarroba.com](https://jarroba.com/wp-content/uploads/2013/02/Ejemplo-de-listado-final-seleccionado-un-elemento-2-www.jarroba.com_.png)](https://jarroba.com/wp-content/uploads/2013/02/Ejemplo-de-listado-final-seleccionado-un-elemento-2-www.jarroba.com_.png)

 

Lo único que vamos a tener como Layout va a ser el elemento “**entrada.xm**l”:

 

```xml

<?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="wrap_content"
android:orientation="horizontal" >

	<ImageView
	android:id="@+id/imageView_imagen"
	android:layout_width="80dp"
	android:layout_height="80dp"
	android:adjustViewBounds="true"
	android:scaleType="fitXY"
	android:contentDescription="Descripción del contenido de la imagen"
	android:src="@android:drawable/ic_menu_gallery" />

	<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="match_parent"
	android:gravity="center"
	android:orientation="vertical" >

		<TextView
		android:id="@+id/textView_superior"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:text="Large Text"
		android:textAppearance="?android:attr/textAppearanceLarge" />

		<TextView
		android:id="@+id/textView_inferior"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:text="Small Text"
		android:textAppearance="?android:attr/textAppearanceSmall" />

	</LinearLayout>

</LinearLayout>
```

 

Para el código Java lo explicaré paso a paso. A diferencia de otros tutoriales de Jarroba donde primero explico y luego pongo el código completo. Aquí lo voy a hacer al revés, debido a que prima el título del artículo que hemos llamado "en pocas líneas"; para que puedas deleitarte por la escasa cantidad de código (quitando los Strings de ejemplo, que es lo que más ocupa 🙂 ), lo bonito que queda, y lo fácil que es programar un listado. Dejo el código completo de “**MainActivity.java**”:

 

```java

import android.app.ListActivity;
import android.database.MatrixCursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ListActivity{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		//Simulamos que extraemos los datos de la base de datos a un cursor
		String[] columnasBD = new String[] {"_id", "imagen", "textoSuperior", "textoInferior"};
		MatrixCursor cursor = new MatrixCursor(columnasBD);
		cursor.addRow(new Object[] {"0", R.drawable.im_buho, "BUHO", "Búho es el nombre común de aves de la familia Strigidae, del orden de las estrigiformes o aves rapaces nocturnas. Habitualmente designa especies que, a diferencia de las lechuzas, tienen plumas alzadas que parecen orejas."});
		cursor.addRow(new Object[] {"1", R.drawable.im_colibri, "COLIBRÍ", "Los troquilinos (Trochilinae) son una subfamilia de aves apodiformes de la familia Trochilidae, conocidas vulgarmente como colibríes, quindes, tucusitos, picaflores, chupamirtos, chuparrosas, huichichiquis (idioma nahuatl), mainumby (idioma guaraní) o guanumby. Conjuntamente con las ermitas, que pertenecen a la subfamilia Phaethornithinae, conforman la familia Trochilidae que, en la sistemática de Charles Sibley, se clasifica en un orden propio: Trochiliformes, independiente de los vencejos del orden Apodiformes. La subfamilia Trochilinae incluye más de 100 géneros que comprenden un total de 330 a 340 especies."});
		cursor.addRow(new Object[] {"2", R.drawable.im_cuervo, "CUERVO", "El cuervo común (Corvus corax) es una especie de ave paseriforme de la familia de los córvidos (Corvidae). Presente en todo el hemisferio septentrional, es la especie de córvido con la mayor superficie de distribución. Con el cuervo de pico grueso, es el mayor de los córvidos y probablemente la paseriforme más pesada; en su madurez, el cuervo común mide entre 52 y 69 centímetros de longitud y su peso varía de 0,69 a 1,7 kilogramos. Los cuervos comunes viven generalmente de 10 a 15 años pero algunos individuos han vivido 40 años. Los juveniles pueden desplazarse en grupos pero las parejas ya formadas permanecen juntas toda su vida, cada pareja defendiendo un territorio. Existen 8 subespecies conocidas que se diferencian muy poco aparentemente, aunque estudios recientes hayan demostrado diferencias genéticas significativas entre las poblaciones de distintas regiones."});
		cursor.addRow(new Object[] {"3", R.drawable.im_flamenco, "FLAMENCO", "Los fenicopteriformes (Phoenicopteriformes), los cuales reciben el nombre vulgar de flamencos, son un orden de aves neognatas, con un único género viviente: Phoenicopterus. Son aves que se distribuyen tanto por el hemisferio occidental como por el hemisferio oriental: existen cuatro especies en América y dos en el Viejo Mundo. Tienen cráneo desmognato holorrino, con 16 a 20 vértebras cervicales y pies anisodáctilos."});
		cursor.addRow(new Object[] {"4", R.drawable.im_kiwi, "KIWI", "Los kiwis (Apterix, gr. 'sin alas') son un género de aves paleognatas compuesto por cinco especies endémicas de Nueva Zelanda.1 2 Son aves no voladoras pequeñas, aproximadamente del tamaño de una gallina. Antes de la llegada de los humanos alrededor del año 1300, en Nueva Zelanda los únicos mamíferos que había eran murciélagos, y los nichos ecológicos que en otras partes del mundo eran ocupados por animales tan diversos como caballos, lobos y ratones fueron utilizados en Nueva Zelanda por pájaros (y en menor proporción por ciertas especies de reptiles). La denominación kiwi es maorí, idioma del pueblo homónimo de linaje malayopolinesio que colonizó Nueva Zelanda antes de la llegada de los europeos."});
		cursor.addRow(new Object[] {"5", R.drawable.im_loro, "LORO", "Las Psitácidas (Psittacidae) son una familia de aves psitaciformes llamadas comúnmente loros o papagayos, e incluye a los guacamayos, las cotorras, los periquitos, los agapornis y formas afines."});
		cursor.addRow(new Object[] {"6", R.drawable.im_pavo, "PAVO", "Pavo es un género de aves galliformes de la familia Phasianidae, que incluye dos especies, el pavo real común (Pavo cristatus) y el pavo real cuelliverde (Pavo muticus).1"});
		cursor.addRow(new Object[] {"7", R.drawable.im_pinguino, "PINGÜINO", "Los pingüinos (familia Spheniscidae, orden Sphenisciformes) son un grupo de aves marinas, no voladoras, que se distribuyen únicamente en el Hemisferio Sur, sobre todo en sus altas latitudes."});

		//Añadimos los datos al Adapter y le indicamos donde dibujar cada dato en la fila del Layout
		String[] desdeEstasColumnas = {"imagen", "textoSuperior", "textoInferior"};
		int[] aEstasViews = {R.id.imageView_imagen, R.id.textView_superior, R.id.textView_inferior};
		SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.entrada, cursor, desdeEstasColumnas, aEstasViews, 0);

		ListView listado = getListView();
		listado.setAdapter(adapter);
	}

	@Override
	public void onListItemClick(ListView lista, View view, int posicion, long id) {
		// Hacer algo cuando un elemento de la lista es seleccionado
		TextView textoTitulo = (TextView) view.findViewById(R.id.textView_superior);

		CharSequence texto = "Seleccionado: " + textoTitulo.getText();
		Toast.makeText(getApplicationContext(), texto, Toast.LENGTH_LONG).show();
	}

}
```

 

Ya está. No hay más código. Todo el código anterior es lo que hay que hacer para que un listado funcione de la manera más óptima en cuanto a código y usando lo más del API de Android posible. Lo que queda del artículo es la explicación de cada parte del código, a la que paso a contar sin más dilación. Este código Java lo resumimos en una única clase que no heredaremos de Activity, sino de ListActivity para que nos gestione el Layout del listado.

 

```java

public class MainActivity extends ListActivity
```

 

Para empezar, necesitamos extraer los datos de algún lado, normalmente se extraen de una base de datos que nos devuelve un Cursor (aquí usaremos MatrixCursor para poder insertar datos a pelo en el cursor, generalmente se usa la clase Cursor). Por no andar liados con la complejidad de una base de datos, simularemos la obtención en un Cursor directamente insertándole datos, pero tenemos que simularlo bien, con las columnas de la base de datos que recuperaríamos, siendo obligatorio el identificador único llamado “_id”. De este modo simularemos que los obtenemos de la siguiente manera:

 

```javascript

String[] columnasBD = new String[] {"_id", "imagen", "textoSuperior", "textoInferior"};

MatrixCursor cursor = new MatrixCursor(columnasBD);

cursor.addRow(new Object[] {"0", R.drawable.im_buho, "BUHO", "Búho es el nombre común de aves de la familia Strigidae, del orden de las estrigiformes o aves rapaces nocturnas. Habitualmente designa especies que, a diferencia de las lechuzas, tienen plumas alzadas que parecen orejas."});
cursor.addRow(new Object[] {"1", R.drawable.im_colibri, "COLIBRÍ", "Los troquilinos (Trochilinae) son una subfamilia de aves apodiformes de la familia Trochilidae, conocidas vulgarmente como colibríes, quindes, tucusitos, picaflores, chupamirtos, chuparrosas, huichichiquis (idioma nahuatl), mainumby (idioma guaraní) o guanumby. Conjuntamente con las ermitas, que pertenecen a la subfamilia Phaethornithinae, conforman la familia Trochilidae que, en la sistemática de Charles Sibley, se clasifica en un orden propio: Trochiliformes, independiente de los vencejos del orden Apodiformes. La subfamilia Trochilinae incluye más de 100 géneros que comprenden un total de 330 a 340 especies."});
cursor.addRow(new Object[] {"2", R.drawable.im_cuervo, "CUERVO", "El cuervo común (Corvus corax) es una especie de ave paseriforme de la familia de los córvidos (Corvidae). Presente en todo el hemisferio septentrional, es la especie de córvido con la mayor superficie de distribución. Con el cuervo de pico grueso, es el mayor de los córvidos y probablemente la paseriforme más pesada; en su madurez, el cuervo común mide entre 52 y 69 centímetros de longitud y su peso varía de 0,69 a 1,7 kilogramos. Los cuervos comunes viven generalmente de 10 a 15 años pero algunos individuos han vivido 40 años. Los juveniles pueden desplazarse en grupos pero las parejas ya formadas permanecen juntas toda su vida, cada pareja defendiendo un territorio. Existen 8 subespecies conocidas que se diferencian muy poco aparentemente, aunque estudios recientes hayan demostrado diferencias genéticas significativas entre las poblaciones de distintas regiones."});
cursor.addRow(new Object[] {"3", R.drawable.im_flamenco, "FLAMENCO", "Los fenicopteriformes (Phoenicopteriformes), los cuales reciben el nombre vulgar de flamencos, son un orden de aves neognatas, con un único género viviente: Phoenicopterus. Son aves que se distribuyen tanto por el hemisferio occidental como por el hemisferio oriental: existen cuatro especies en América y dos en el Viejo Mundo. Tienen cráneo desmognato holorrino, con 16 a 20 vértebras cervicales y pies anisodáctilos."});
cursor.addRow(new Object[] {"4", R.drawable.im_kiwi, "KIWI", "Los kiwis (Apterix, gr. 'sin alas') son un género de aves paleognatas compuesto por cinco especies endémicas de Nueva Zelanda.1 2 Son aves no voladoras pequeñas, aproximadamente del tamaño de una gallina. Antes de la llegada de los humanos alrededor del año 1300, en Nueva Zelanda los únicos mamíferos que había eran murciélagos, y los nichos ecológicos que en otras partes del mundo eran ocupados por animales tan diversos como caballos, lobos y ratones fueron utilizados en Nueva Zelanda por pájaros (y en menor proporción por ciertas especies de reptiles). La denominación kiwi es maorí, idioma del pueblo homónimo de linaje malayopolinesio que colonizó Nueva Zelanda antes de la llegada de los europeos."});
cursor.addRow(new Object[] {"5", R.drawable.im_loro, "LORO", "Las Psitácidas (Psittacidae) son una familia de aves psitaciformes llamadas comúnmente loros o papagayos, e incluye a los guacamayos, las cotorras, los periquitos, los agapornis y formas afines."});
cursor.addRow(new Object[] {"6", R.drawable.im_pavo, "PAVO", "Pavo es un género de aves galliformes de la familia Phasianidae, que incluye dos especies, el pavo real común (Pavo cristatus) y el pavo real cuelliverde (Pavo muticus).1"});
cursor.addRow(new Object[] {"7", R.drawable.im_pinguino, "PINGÜINO", "Los pingüinos (familia Spheniscidae, orden Sphenisciformes) son un grupo de aves marinas, no voladoras, que se distribuyen únicamente en el Hemisferio Sur, sobre todo en sus altas latitudes."});
```

 

Crearemos el adaptador. Para ello usaremos el de Android que se llama SimpleCursorAdapter. Al que hay que pasarle la “entrada.xml” para que ponga ahí los datos que le pasaremos en el Cursor. ¿Y el adaptador en qué View colocará cada dato? Para ello se usan dos arrays de String, uno que tiene el nombre de las columnas anteriores, sin identificador; y otro con las Views donde se ha de dibujar dicho dato. Estos dos arrays de Strings están emparejados; por ejemplo, la posición 2 del array de columnas -o atributos, depende de como te guste nombrarlo en base de datos- colocará dicho dato en la View que está en la posición 2 del otro array.

 

```java

String[] desdeEstasColumnas = {"imagen", "textoSuperior", "textoInferior"};
int[] aEstasViews = {R.id.imageView_imagen, R.id.textView_superior, R.id.textView_inferior};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.entrada, cursor, desdeEstasColumnas, aEstasViews, 0);
```

 

De una manera muy sencilla añadimos el Adapter al listado, obteniendo el listado con getListView(). Recuerdo que la clase actúa como listado y Activity a la vez; debido a que no hereda de Activity, sino ListActivity.

 

```java

ListView listado = getListView();
listado.setAdapter(adapter);
```

 

Y solo nos queda detectar el evento de clicado sobre un elemento de la lista. Con un evento muy simple obtenemos la fila que se ha pulsado con toda su jerarquía de Views; por lo que podemos navegar por la jerarquía con findViewById(), de este modo obtener la View que queramos y con ello el contenido que asignamos previamente en el Adapter.

 

```java

@Override
public void onListItemClick(ListView lista, View view, int posicion, long id) {
	// Hacer algo cuando un elemento de la lista es seleccionado
	TextView textoTitulo = (TextView) view.findViewById(R.id.textView_superior);

	CharSequence texto = "Seleccionado: " + textoTitulo.getText();
	Toast.makeText(getApplicationContext(), texto, Toast.LENGTH_LONG).show();
}
```

 

Como puedes comprobar, lo más complicado muchas veces es lo más sencillo 😀
