¿Poblando un ListView usando un ArrayList?

109

Mi Androidaplicación necesita completar el ListViewuso de los datos de un ArrayList.

Tengo problemas para hacer esto. ¿Alguien puede ayudarme con el código?

KanNaN
fuente

Respuestas:

228

Debe hacerlo a través de un ArrayAdapterque adaptará su ArrayList (o cualquier otra colección) a sus elementos en su diseño (ListView, Spinner, etc.).

Esto es lo que dice la guía para desarrolladores de Android :

A ListAdapterque gestiona un ListViewrespaldado por una serie de objetos arbitrarios. De forma predeterminada, esta clase espera que el ID de recurso proporcionado haga referencia a un solo TextView. Si desea usar un diseño más complejo, use los constructores que también toman una identificación de campo. Ese ID de campo debe hacer referencia a a TextViewen el recurso de diseño más grande.

Independientemente de TextViewcómo se haga referencia a, se rellenará con el toString()de cada objeto de la matriz. Puede agregar listas o matrices de objetos personalizados. Anule el toString()método de sus objetos para determinar qué texto se mostrará para el elemento en la lista.

Para usar algo que no sea TextViewspara la visualización de la matriz, por ejemplo ImageViews, o para que algunos datos además de los toString()resultados llenen las vistas, anule getView(int, View, ViewGroup)para devolver el tipo de vista que desea.

Entonces su código debería verse así:

public class YourActivity extends Activity {

    private ListView lv;

    public void onCreate(Bundle saveInstanceState) {
         setContentView(R.layout.your_layout);

         lv = (ListView) findViewById(R.id.your_list_view_id);

         // Instanciating an array list (you don't need to do this, 
         // you already have yours).
         List<String> your_array_list = new ArrayList<String>();
         your_array_list.add("foo");
         your_array_list.add("bar");

         // This is the array adapter, it takes the context of the activity as a 
         // first parameter, the type of list view as a second parameter and your 
         // array as a third parameter.
         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                 this, 
                 android.R.layout.simple_list_item_1,
                 your_array_list );

         lv.setAdapter(arrayAdapter); 
    }
}
Amokrane Chentir
fuente
1
@ Amokrane Chentir: no pude conseguirle ... ¿puede por favor escribir el programa completo ... gracias
kAnNaN
1
@KanNaN: Claro, ¿puedes ver si mi edición es más explícita para ti?
Amokrane Chentir
1
@ Amokrane Chentir: Creo que el método "setContentView" debe llamarse antes de "findViewById" o de lo contrario no se encontrará ListView.
Petru
List <String> no se reconoce. ¿por qué? Estoy usando Android Studio.
Ali.Rashidi
14

tutorial

También busque la interfaz ArrayAdapter :

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
Sanjit Saluja
fuente
11

Pruebe la siguiente respuesta para completar la vista de lista usando ArrayList

public class ExampleActivity extends Activity
{
    ArrayList<String> movies;

    public void onCreate(Bundle saveInstanceState)
    {
       super.onCreate(saveInstanceState);
       setContentView(R.layout.list);

       // Get the reference of movies
       ListView moviesList=(ListView)findViewById(R.id.listview);

       movies = new ArrayList<String>();
       getMovies();

       // Create The Adapter with passing ArrayList as 3rd parameter
       ArrayAdapter<String> arrayAdapter =      
                 new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, movies);
       // Set The Adapter
       moviesList.setAdapter(arrayAdapter); 

       // register onClickListener to handle click events on each item
       moviesList.setOnItemClickListener(new OnItemClickListener()
       {
           // argument position gives the index of item which is clicked
           public void onItemClick(AdapterView<?> arg0, View v,int position, long arg3)
           {
               String selectedmovie=movies.get(position);
               Toast.makeText(getApplicationContext(), "Movie Selected : "+selectedmovie,   Toast.LENGTH_LONG).show();
           }
        });
    }

    void getmovies()
    {
        movies.add("X-Men");
        movies.add("IRONMAN");
        movies.add("SPIDY");
        movies.add("NARNIA");
        movies.add("LIONKING");
        movies.add("AVENGERS");   
    }
}
KarthikKPN
fuente
2
public class Example extends Activity
{
    private ListView lv;
    ArrayList<String> arrlist=new ArrayList<String>();
    //let me assume that you are putting the values in this arraylist
    //Now convert your arraylist to array

    //You will get an exmaple here

    //http://www.java-tips.org/java-se-tips/java.lang/how-to-convert-an-arraylist-into-an-array.html 

    private String arr[]=convert(arrlist);
    @Override
    public void onCreate(Bundle bun)
    {
        super.onCreate(bun);
        setContentView(R.layout.main);
        lv=(ListView)findViewById(R.id.lv);
        lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , arr));
        }
    }
Tanmay Mandal
fuente
0

A continuación, se muestra un ejemplo de cómo podría implementar una vista de lista:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //We have our list view
    final ListView dynamic = findViewById(R.id.dynamic);

    //Create an array of elements
    final ArrayList<String> classes = new ArrayList<>();
    classes.add("Data Structures");
    classes.add("Assembly Language");
    classes.add("Calculus 3");
    classes.add("Switching Systems");
    classes.add("Analysis Tools");

    //Create adapter for ArrayList
    final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, classes);

    //Insert Adapter into List
    dynamic.setAdapter(adapter);

    //set click functionality for each list item
    dynamic.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.i("User clicked ", classes.get(position));
        }
    });



}
Syed Sadman
fuente
Si está utilizando Android Studio, solo completará automáticamente el método onItemClick (). Ahora todo lo que tienes que hacer es agregarle funcionalidad. En mi caso, acabo de registrar cada elemento de la lista.
Syed Sadman