ListView et GridView sont tous les deux des descendants de ViewGroup, mais ils sont plus utilisés comme une vue car ils sont pilotés par les données. En d'autres termes, plutôt que de définir toutes les vues possibles qui pourraient remplir un ListView (ou GridView) au moment de la conception, le contenu est créé dynamiquement à partir des données transmises à la vue. (La disposition de Listitem peut être créée au moment du design pour contrôler l'apparence des données pendant l'exécution.)
Par exemple, si vous deviez présenter une liste de pays à un utilisateur, vous pouvez créer un LinearLayout et ajouter un bouton pour chaque pays. Il y a plusieurs problèmes avec cette approche: déterminer les pays disponibles, maintenir la liste des boutons à jour, avoir suffisamment d'espace pour tous les pays, etc. Sinon, vous pouvez créer une liste de pays pour remplir un ListView, qui créera alors un bouton pour chaque entrée.
Nous allons créer un exemple, en utilisant la seconde approche, pour remplir un ListView à partir d'un tableau de noms de pays.

Se préparer
Créez un nouveau projet dans Android Studio et appelez-le ListView. La classe ActivityMain par défaut étend la classe Activity. Nous allons le changer pour étendre la classe ListActivity à la place. Nous allons ensuite créer une liste de chaînes simple et la lier à ListView, pour dériver les boutons lors de l'exécution.

Comment faire...
1. Ouvrez le fichier MainActivity.java et modifiez la déclaration de base afin qu'elle s'étende
ListActivity au lieu de la classe Activity:
classe publique MainActivity extends ListActivity {
2. Changez onCreate () pour qu'il corresponde à ce qui suit:
void protégé onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState);
String [] countries = new String [] {"Chine", "France", "Allemagne", "Inde", "Russie", "Royaume-Uni",
"États Unis"};
ListAdapter countryAdapter = new
ArrayAdapter <String> (this, android.R.layout. Simple_list_item_1, pays); setListAdapter (countryAdapter);
-C38}
getListView (). setOnItemClickListener (
new AdapterView.OnItemClickListener () {
@Passer outre
void public onItemClick (AdapterView <?> parent, Vue vue, position int, identifiant long) {
String s = ((TextView) view) .getText () + "" + position;
Toast.makeText (getApplicationContext (), s, Toast.LENGTH_SHORT) .show ();
}
}
3. Maintenant, exécutez l'application sur un émulateur ou un périphérique pour voir le ListView rempli.
Comment ça marche...
Nous commençons par créer un tableau simple de noms de pays, puis l'utilisons pour remplir un ListAdapter. Dans cet exemple, nous avons utilisé un ArrayAdapter lors de la construction de ListAdapter, mais Android a également plusieurs autres types d'adaptateurs disponibles. Par exemple, si vos données sont stockées dans une base de données, vous pouvez utiliser CursorAdapter. Si l'un des types prédéfinis ne répond pas à vos besoins, vous pouvez toujours utiliser CustomAdapter.
Nous créons l'adaptateur avec cette ligne de code:
ListAdapter countryAdapter = new ArrayAdapter <String> (this, android.R.layout.simple_list_item_1, pays);
Ici, nous instancions ArrayAdapter en utilisant notre tableau de chaînes (le dernier paramètre). Remarquez le paramètre android.R.layout.simple_list_item_1? Ceci définit la disposition du bouton. Ici, nous utilisons l'une des mises en page fournies par Android, mais nous pouvons créer notre propre mise en page et transmettre notre identifiant à la place.
Une fois que l'adaptateur est prêt, nous le passons à ListView sous-jacent avec l'appel setListAdapter (). (Le ListView sous-jacent provient de l'extension de ListViewActivity.) Enfin, nous implémentons setOnItemClickListener pour afficher un Toast lorsque l'utilisateur appuie sur un bouton (qui représente un pays) dans la liste.
ListViews sont très communs dans Android car ils utilisent efficacement l'espace de l'écran avec une vue défilante, ce qui peut être très pratique sur les petits écrans. La disposition ScrollView offre une approche alternative pour créer un effet de défilement similaire. La principale différence entre les deux approches est que la mise en page ScrollView est entièrement gonflée avant d'être affichée à l'utilisateur, alors que ListView ne fait que gonfler les vues qui seront visibles. Pour des données limitées, cela peut ne pas poser de problème, mais pour les ensembles de données plus volumineux, l'application peut manquer de mémoire avant même que la liste ne s'affiche.
{mb
En outre, puisque la liste est pilotée par un adaptateur de données, les données peuvent facilement être modifiées.
Même dans notre exemple limité, l'ajout d'un nouveau pays à l'écran est aussi simple que l'ajout du nom à la liste des pays. Plus important encore, la liste peut être mise à jour pendant l'exécution pendant que l'utilisateur utilise l'application (par exemple, télécharger une liste mise à jour à partir d'un site Web pour afficher les options en temps réel).

Il y a plus...
La Listview prend également en charge un mode de sélection multiple à l'aide de la méthode setChoiceMode (). Pour le voir en action, ajoutez la ligne de code suivante après setListAdapter ():
getListView (). setChoiceMode (ListView.CHOICE_MODE_MULTIPLE);
Ensuite, modifiez la disposition ListItem de android.R.layout.simple_list_item_1 à android.R.layout.simple_list_item_checked.
Alors que la plupart des applications nécessitant une liste déroulante se tournent vers ListView, Android propose également GridView. Ils sont très similaires dans la fonctionnalité, même en utilisant les mêmes adaptateurs de données. La principale différence est visuelle qui permet plusieurs colonnes. Pour mieux comprendre, changeons l'exemple ListView en GridView.
Pour commencer, nous devons changer MainActivity de nouveau à partir de Activity, au lieu de ListActivity. (Cela annulera l'étape 1 précédente.) Ensuite, remplacez onCreate () avec le code suivant:
void protégé onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState);
GridView gridView = nouveau GridView (this); setContentView (gridView);
String [] countries = new String [] {"Chine", "France",
"Allemagne", "Inde", "Russie", "Royaume-Uni",
"États Unis"};
ListAdapter countryAdapter = new ArrayAdapter <String> (this, android.R.layout.simple_list_item_1, pays); gridView.setAdapter (countryAdapter); gridView.setNumColumns (2); gridView.setOnItemClickListener (new AdapterView.OnItemClickListener () {
@Passer outre
void public onItemClick (AdapterView <?> parent, Vue vue, position int, identifiant long) {
String s = ((TextView) view) .getText () + "" + position;
Toast.makeText (getApplicationContext (), s, Toast.LENGTH_SHORT) .show ();
 }
}
Comme vous pouvez le voir, il y a plus de code d'installation pour le Gridview que pour le ListView. La méthode onCreate () crée un nouveau Gridview et le transmet dans l'appel setContentView (). (Nous avons utilisé cette variante de setContentView, comme indiqué dans Définir et gonfler une mise en page, au lieu de créer une mise en page avec seulement un Gridview, mais le résultat final est le même.)
La classe de base ListViewActivity gère une grande partie de cela, mais la Gridview n'a pas de classe d'activité correspondante à étendre.