Uso de un ListView en Android para mostrar una lista de datos

Uso de un ListView en Android para mostrar una lista de datos

Un ListView en Android es un objeto que nos permite mostrar una lista de elementos desplazables. Veamos ejemplo de cómo construirlo paso a paso.

En el siguiente ejemplo deseamos mostrar una lista compuesta por  5 estados de México utilizando un ListView en Android.

ListView que muestra una lista de datos estáticos

Paso 1. Crea un proyecto nuevo.

Paso 2. Coloca un ListView usando la vista Diseño.

ListView en Android

ListView en Android

Paso 3.  Crea las variables a utilizar

Entre ellas, una variable de tipo ListView (en MainActivity)

private ListView listview;
private ArrayList<String> names;

Paso 4. Enlazar

Enlaza la variable anterior con el elemento ListView de la vista Diseño. 

listview = (ListView) findViewById(R.id.listview);

Paso 5. Coloca los datos que quieras mostrar en un Array de Strings

names = new ArrayList<String>();         
names.add("Veracruz");         
names.add("Tabasco");         
names.add("Chiapas");         
names.add("Campeche");         
names.add("Quintana Roo”);

 

Paso 6. Crea un adaptador y agrégale la variable de Strings.

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);

Paso 7. Indica que el listview utilizará ese adaptador.

listview.setAdapter(adapter);

El resultado hasta aquí es el siguiente:

ListView en Android

ListView en Android

 

 

Agregar un evento Click a un ListView en Android

Paso 1. Creamos un evento ClickListener.

Paso 2. Sobreescribimos la función onItemClick

Pasamos la vista a mostrar, la posición del arreglo de nombres de estado. Si el usuario da clic se mostrará una pequeña ventana de texto mostrando el valor de esa determianda posición.

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        Toast.makeText(MainActivity.this, "Has pulsado: "+ names.get(position), Toast.LENGTH_LONG).show();
      }
   });

El resultado hasta aquí es el siguiente

ListView en Android

ListView en Android

Personalizar un ListView en Android

Vamos a Crear un Layout personalizado. 

Paso 1. Da clic derecho en layout (está en la rama de app->res->layot), y selecciona New->Layout resource file.

Paso 2. En la ventana que se abre, escribre como File name: list_item, y como Root element: LinearLayout. Pulse Ok.

Ventana New Resource File

Ventana New Resource File

Paso 3. Coloca un ImageView y un TextView en ese layout.

Paso 4. Personaliza los componentes para ajustar la imagen a la izquierda del texto, viéndose así:

Layout list_item

Layout list_item

El código XML utilizado fue el siguiente:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="80dp">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_margin="25dp"
        app:srcCompat="@android:drawable/btn_star_big_on" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textColor="#333"
        android:layout_gravity="center_vertical"
        android:text="TextView" />
</LinearLayout>

Paso 5. Crea una nueva clase de Java llamada MyAdapter. 

Ve al menú File->New->Java Class

Como nombre de clase usa MyAdapter.

Paso 6. Código de la clase MyAdapter.

Esta clase crea un Adapter personalizado basado en el layout que creamos.  El código es el siguiente:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;

public class MyAdapter extends BaseAdapter {
    private Context context;
    private int layout;
    private ArrayList<String> names;
    public MyAdapter(Context context, int layout, ArrayList<String> names){
        this.context = context;
        this.layout = layout;
        this.names = names;
    }

    @Override
    public int getCount() {
        return this.names.size();
    }

    @Override
    public Object getItem(int position) {
        return this.names.get(position);
    }

    @Override
    public long getItemId(int id) {
        return id;
    }

    @Override

    public View getView(int position, View convertView, ViewGroup viewGroup) {
        // Copiamos la vista
        View v = convertView;

        //Inflamos la vista con nuestro propio layout
        LayoutInflater layoutInflater = LayoutInflater.from(this.context);

        v= layoutInflater.inflate(R.layout.list_item, null);
        // Valor actual según la posición

        String currentName  = names.get(position);
       
        // Referenciamos el elemento a modificar y lo rellenamos
        TextView textView = (TextView) v.findViewById(R.id.textView);
        textView.setText(currentName);
        //Devolvemos la vista inflada
        return v;
    }

 

Paso 7. Enlazar con nuestro adaptador personalizado.

En el MainActivity, agregamos las siguientes líneas:

MyAdapter myAdapter = new MyAdapter(this, R.layout.list_item, names);
listview.setAdapter(myAdapter);

Y listo!

ListView personalizado en Android

ListView personalizado en Android

Referencias:

1. Android (2018). Vista de lista. Disponible en [https://developer.android.com/guide/topics/ui/layout/listview?hl=es-419]

¿Qué te pareció este artículo?
  • Regular 
  • Poco informativo 
  • No era lo que buscaba 
  • Interesante 
  • Excelente 
(Visto 64.575 veces)
Facebooktwitterlinkedinmail

Tu comentario

opiniones

Comments

  • Optimizar un ListView usando ViewHolder - | Oct 17,2018

    […] el artículo anterior vimos cómo usar un ListView en Android para mostrar una lista de datos.  Ahora bien, ¿qué pasaría si esa lista de datos fuera muy grande? Por ejemplo, en una […]

  • Crear un botón OptionsMenu para la action bar en Android - | Oct 17,2018

    […] Uso de un ListView en Android para mostrar una lista de datos […]

  • Crear un ContextMenu en Android - | Oct 18,2018

    […] Uso de un ListView en Android para mostrar una lista de datos […]