113 votes

Remplir un ListView en utilisant un ArrayList ?

Mon Android doit remplir le formulaire ListView en utilisant les données d'un ArrayList .

J'ai du mal à le faire. Quelqu'un peut-il m'aider avec le code ?

232voto

Amokrane Chentir Points 11441

Vous devez le faire par le biais d'un ArrayAdapter qui adaptera votre ArrayList (ou toute autre collection) à vos éléments dans votre layout (ListView, Spinner etc.).

C'est ce que le Guide du développeur Android dit :

A ListAdapter qui gère un ListView soutenu par un tableau d'objets arbitraires. Par défaut, cette classe s'attend à ce que l'identifiant de la ressource fournie fasse référence à un unique TextView . Si vous souhaitez utiliser une mise en page plus complexe, utilisez les constructeurs qui prennent également un identifiant de champ. Cet identifiant de champ doit faire référence à un TextView dans la ressource de mise en page plus large.

Toutefois, le TextView est référencée, elle sera remplie avec l'élément toString() de chaque objet du tableau. Vous pouvez ajouter des listes ou des tableaux d'objets personnalisés. Remplacez l'élément toString() de vos objets pour déterminer le texte qui sera affiché pour l'élément de la liste.

Pour utiliser autre chose que TextViews pour l'affichage du tableau, par exemple ImageViews ou d'avoir des données en plus toString() les résultats remplissent les vues, remplacez getView(int, View, ViewGroup) pour retourner le type de vue que vous voulez.

Votre code devrait donc ressembler à ça :

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

1 votes

@ Amokrane Chentir : je n'ai pas réussi à vous joindre ..... pouvez-vous taper le programme complet .... merci

1 votes

@KanNaN : Bien sûr, pouvez-vous voir si mon montage est plus explicite pour vous ?

1 votes

@ Amokrane Chentir : Je pense que la méthode "setContentView" doit être appelée avant "findViewById" sinon aucune ListView ne sera trouvée.

14voto

Sanjit Saluja Points 3221

tutoriel

Consultez également Adaptateur de tableau interface :

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

11voto

KarthikKPN Points 438

Essayez la réponse ci-dessous pour remplir le 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");   
    }
}

2voto

Tanmay Mandal Points 13341
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));
        }
    }

0voto

Syed Sadman Points 42

Voici un exemple de la façon dont vous pouvez mettre en œuvre une vue de 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 votes

Si vous utilisez Android Studio, la méthode onItemClick() sera remplie automatiquement. Maintenant, tout ce que vous avez à faire est d'ajouter des fonctionnalités. Dans mon cas, j'ai juste enregistré chaque élément de la liste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X