Es muy frecuente en las aplicaciones para dispositivos móviles, el uso de listas para mostrar una serie de elementos. El usuario puede ver la lista completa de los elementos que forman la lista, pudiendo desplazarse a través de ellos. Si el usuario selecciona alguno de los elementos de la lista, la aplicación podrá realizar alguna acción relacionado con el elemento indicado.

lista01

ListView

Puedes crear una lista en una Activity de la aplicación insertando un elemento ListView que encontrarás en la sección Composite de la palete.

lista02

El método setAdapter de la clase ListView permite indicar el formato que va a tener la lista, así como el contenido de la misma, todo ello utilizando un objeto ListAdapter o de sus subclases como ArrayAdapter (para asignarle un array de objetos) o CursorAdapter (para utilizar objetos obtenidos desde una base de datos).

void setAdapter (ListAdapter adapter)

La clase ArrayAdapter dispone de varios métodos constructores. Quizá el constructor más sencillo sea el que recibe como parámetro el contexto actual, el identificador de un recurso de tipo Layout que contenga un TextView donde se mostrará cada elemento, y un array con el contenido.

ArrayAdapter (Context context, int textViewResourceId, T[] objects)

Si sólo deseas mostrar un String en cada elemento de la lista, puedes usar en el parámetro textViewResourceId, alguno de los layouts predefinidos en Android. Puedes ver las diferencias entre los distintos estilos en el artículo Different styles to show data in listview. El más sencillo es android.R.layout.simple_list_item_1 que únicamente muestra la cadena de texto.

Por ejemplo, puedes crear una lista de nombres ficticios con el siguiente código:

{code}

package com.example.ejemplolist;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        String[] values = new String[] { "AMADOR OSSORIO MUÑOZ", "BALTASAR LORENTE FERNANDEZ",
                "JESUS PEDRO IGLESIAS", "MARIA DOLORES SAHELICES DOMINGUEZ",
                "ILUMINADA LEON VICENTE", "MARIA BELEN MORILLAS PEÑA",
                "JUAN MANUEL SAAVEDRA ESCOBAR", "CARMEN MARTINEZ RODRIGUEZ",
                "DIEGO SANTUY LOMAS", "GUILLERMO MAÑAS SOLA",
                "HASSAN IZQUIERDO CUTILLAS", "MIGUEL FLORES RODRIGUEZ",
                "ARSINOE GONZALEZ MARTIN", "JUAN FERNANDEZ RUIZ",
                "MARIA DEL CARMEN BERMEJO NAVARRO", "VICTOR RODRIGUEZ CAYUELA",
                "CARLOS NAVARRO BOTAZ", "ROSA NIEVES RUBIO PEÑA",
                "MARIA DEL MAR GARCIA ARAGUAS", "IVAN TOME SANCHEZ" };
        
// Se ha añadido previamente al Layout un ListView con el identificador listView1
        ListView listView = (ListView) findViewById(R.id.listView1);
        // Crear el adaptador asignando los valores del array
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                  android.R.layout.simple_list_item_activated_1, values);
        // Asignar el adaptador a la lista
        listView.setAdapter(adapter);
    }

}

{/code}

El resultado debe ser similar al siguiente:

lista03

Obtener la posición seleccionada

Habitualmente es necesario conocer qué elemento ha seleccionado el usuario al pulsar sobre él, para hacer alguna operación con los datos relacionados con dicho elemento.

Para ello, debes utilizar el método setOnItemClickListener con el objeto ListView creado anteriormente, al que se le debe pasar como parámetro un objeto OnItemClickListener que puedes crear directamente dentro de los paréntesis. Ahí debes sobreescribir el método onItemClick, y en su contenido indicarás las operaciones a realizar cuando el usuario haga clic en un elemento de la lista.

void onItemClick (AdapterView<?> parent, View view, int position, long id)

Para conocer cuál ha sido el elemento que se ha seleccionado, el parámetro position te ofrece el número de la posición de dicho elemento, iniciando la cuenta desde el valor 0.

Podemos probar con este ejemplo, donde se muestra en pantalla un mensaje Toast con el número de la posición seleccionada. Deberás copiar todo el código dentro del método onCreate que se ha mostrado anteriormente.

{code}

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        // En este ejemplo sólo se muestra la posición en un mensaje
        Toast toast = Toast.makeText(getApplicationContext(),
                "Posición seleccionada: " + position, Toast.LENGTH_LONG);
        toast.show();
    }
});

{/code}

Al ejecutarlo puedes obtener un resultado como el siguiente:

lista04