web-dev-qa-db-fra.com

Remplir un ListView en utilisant un ArrayList?

Mon application Android doit renseigner la ListView à l'aide des données d'une ArrayList

J'ai du mal à faire ça. Quelqu'un peut-il m'aider s'il vous plaît avec le code?

97
kAnNaN

Vous devez le faire via une ArrayAdapter qui adaptera votre ArrayList (ou toute autre collection) à vos éléments dans votre mise en page (ListView, Spinner, etc.).

Voici ce que dit le Guide du développeur Android :

ListAdapter qui gère une ListView sauvegardée par un tableau d'objets arbitraires. Par défaut, cette classe s'attend à ce que l'ID de ressource fourni fasse référence à une seule variable TextView. Si vous souhaitez utiliser une présentation plus complexe, utilisez les constructeurs qui prennent également un identifiant de champ. Cet identifiant de champ doit faire référence à TextView dans la plus grande ressource de présentation. 

Cependant, la variable TextView est référencée, elle sera remplie avec la fonction toString() de chaque objet du tableau. Vous pouvez ajouter des listes ou des tableaux d'objets personnalisés. Redéfinissez la méthode toString() de vos objets pour déterminer le texte à afficher pour l'élément de la liste. 

Pour utiliser autre chose que TextViews pour l'affichage du tableau, par exemple ImageViews, ou pour que des données autres que les résultats de toString() remplissent les vues, remplacez getView(int, View, ViewGroup) pour renvoyer le type de vue souhaité.

Donc, votre code devrait ressembler à:

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); 
    }
}
212
Amokrane Chentir

Didacticiel

Recherchez également ArrayAdapter interface:

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

Essayez la réponse ci-dessous pour remplir listview en utilisant 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");   
    }
}
6
KarthikKPN
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));
        }
    }
2
Tanmay Mandal

Voici un exemple de la façon dont vous pouvez implémenter une vue liste:

 @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));
        }
    });



}
0
Syed Sadman