299 votos

Agregar dinámicamente los elementos de un listView Android

¿Alguien puede explicar o sugerir un tutorial para crear un listView en android?

Aquí están mis requisitos:

  • Yo debería ser capaz de agregar dinámicamente nuevos elementos pulsando un botón.
  • Debe ser bastante simple de entender (posiblemente sin ningún tipo de mejoras en el rendimiento o convertview, por ejemplo)

Sé que hay unas cuantas preguntas sobre este tema, publicado aquí en StackOverflow, pero no podía encontrar nada que pudiera dar respuesta a mi pregunta. Gracias!

573voto

Shardul Puntos 10371

Crear un XML de diseño por primera vez en su proyecto res/layout/main.xml carpeta:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <Button
        android:id="@+id/addBtn"
        android:text="Add New Item"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="addItems"/>
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:drawSelectorOnTop="false"
    />
</LinearLayout>

Este es un diseño simple, con un botón en la parte superior y una vista de lista en la parte inferior. Tenga en cuenta que el ListView tiene el id @android:id/list que define el valor predeterminado ListView una ListActivity puede utilizar.

public class ListViewDemo extends ListActivity {
    //LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
    ArrayList<String> listItems=new ArrayList<String>();

    //DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LISTVIEW
    ArrayAdapter<String> adapter;

    //RECORDING HOW MANY TIMES THE BUTTON HAS BEEN CLICKED
    int clickCounter=0;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        adapter=new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,
            listItems);
        setListAdapter(adapter);
    }

    //METHOD WHICH WILL HANDLE DYNAMIC INSERTION
    public void addItems(View v) {
        listItems.add("Clicked : "+clickCounter++);
        adapter.notifyDataSetChanged();
    }
}

android.R.layout.simple_list_item_1 es el valor predeterminado de la lista de elementos de diseño de los suministrados por Android, y se puede utilizar este stock de diseño para los no-cosas complejas.

listItems es una Lista que contiene los datos que se muestran en el ListView. La inserción y extracción debe hacerse en listItems; los cambios en listItems debe ser reflejado en la vista. Eso es manejado por ArrayAdapter<String> adapter, el cual debe ser notificado mediante:

adapter.notifyDataSetChanged();

Un Adaptador se crea una instancia con 3 parámetros: el contexto, lo que podría ser su activity/listactivity; el diseño de tu persona elemento de la lista; y, por último, la lista, que es el verdadero datos que se muestran en la lista.

59voto

venkat530 Puntos 38

en lugar de

listItems.add("New Item");
adapter.notifyDataSetChanged();

usted puede llamar directamente a

adapter.add("New Item");

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: