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