Remplir un ListView à l'aide d'un ArrayList?

109

Mon Androidapplication doit remplir le ListViewà l'aide des données d'un fichier ArrayList.

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

kAnNaN
la source

Réponses:

228

Vous devez le faire via un ArrayAdapterqui 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 :

A ListAdapterqui gère un ListViewsauvegardé par un tableau d'objets arbitraires. Par défaut, cette classe s'attend à ce que l'ID de ressource fourni référence un seul 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 référencer a TextViewdans la plus grande ressource de mise en page.

Quelle que soit la manière dont le TextViewest référencé, il sera rempli avec le toString()de chaque objet du tableau. Vous pouvez ajouter des listes ou des tableaux d'objets personnalisés. Remplacez la toString()méthode de vos objets pour déterminer le texte qui sera affiché pour l'élément dans la liste.

Pour utiliser autre chose que TextViewspour l'affichage du tableau, par exemple ImageViews, ou pour que certaines données en plus des toString()résultats 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); 
    }
}
Amokrane Chentir
la source
1
@ Amokrane Chentir: je ne pourrais pas vous avoir ..... pouvez-vous taper le programme complet .... merci
kAnNaN
1
@KanNaN: Bien sûr, pouvez-vous voir si ma modification est plus explicite pour vous?
Amokrane Chentir
1
@ Amokrane Chentir: Je pense que la méthode "setContentView" doit être appelée avant "findViewById" sinon aucun ListView ne sera trouvé.
Petru
La liste <String> n'est pas reconnue. Pourquoi? J'utilise Android Studio.
Ali.Rashidi
14

Didacticiel

Vérifiez aussi ArrayAdapter Interface:

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

Essayez la réponse ci-dessous pour remplir la vue de liste à l'aide de 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
la source
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));
        }
    }
Mandal Tanmay
la source
0

Voici un exemple de la façon dont vous pourriez implémenter 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));
        }
    });



}
Syed Sadman
la source
Si vous utilisez Android Studio, il suffit de remplir automatiquement la méthode onItemClick (). Il ne vous reste plus qu'à y ajouter des fonctionnalités. Pour mon cas, je viens de connecter chaque élément de la liste.
Syed Sadman