L'utilisation d'un ArrayAdapter avec ListView · codepath

La découverte de ces guides utiles?

Nous avons besoin de l'aide de la collectivité afin d'améliorer ces guides, ajouter de nouveaux sujets et de garder les sujets mis à jour. Consultez nos directives de contribution ici et notre liste de questions de sujet pour de grandes façons d'aider.







Plus d'infos sur la montée en puissance sur Android rapidement?

(États-Unis uniquement) Si vous êtes un ingénieur existant à partir de 2 ans d'expérience professionnelle dans le développement de logiciels et sont sérieux au sujet de la montée en puissance sur Android rapidement, assurez-vous d'appliquer notre soirée libre 8 semaines Android bootcamp.

Pas aux États-Unis? S'il vous plaît remplir notre formulaire de demande d'intérêt et nous vous informerons des cours sont disponibles dans votre région alimentée par les organisateurs locaux.

Cloner ce wiki localement

Dans le développement Android, à tout moment, nous voulons montrer une liste verticale des éléments défilants, nous utiliserons un ListView qui a des données de population en utilisant un adaptateur. L'adaptateur à utiliser est appelé plus simple un ArrayAdapter parce que l'adaptateur convertit un ArrayList d'objets en objets chargés Voir dans le conteneur ListView.

Le ArrayAdapter s'intègre entre un ArrayList (source de données) et la ListView (représentation visuelle) et configure deux aspects:

  • Quelle tableau à utiliser comme source de données pour la liste
  • Comment convertir tout élément donné dans le tableau dans un objet View correspondant

Notez comme indiqué ci-dessus qu'il existe d'autres sources de données en plus d'une ArrayAdapter comme le CursorAdapter qui se lie directement à la place un jeu de résultats à partir d'une base de données SQLite locale.

Recyclage Voir Ligne

Lorsque vous utilisez un adaptateur et un ListView. nous devons nous assurer de comprendre comment le recyclage de vue fonctionne.

Lorsque votre ListView est connecté à un adaptateur, l'adaptateur instanciera lignes jusqu'à ce que le ListView a été entièrement rempli avec des éléments assez pour remplir toute la hauteur de la liste. À ce moment-là, aucun élément de ligne supplémentaires sont créés dans la mémoire.

Au lieu de cela, comme le défilement de l'utilisateur dans la liste, les éléments qui quittent l'écran sont conservés en mémoire pour une utilisation ultérieure et chaque nouvelle ligne qui entre dans l'écran réutilise une ancienne ligne conservée dans la mémoire. De cette façon, même pour une liste de 1000 articles, seulement

7 lignes de vue d'élément sont jamais instanciées ou conservées en mémoire. Voici un aperçu visuel du recyclage:

Voici un autre diagramme connexe sur la vue du recyclage:

Reportez-vous à ce guide ListView pour un autre regard sur la façon dont cela fonctionne pour optimiser les performances de vos listes. Assurez-vous de vérifier cette vidéo Udacity sur la vue du recyclage aussi bien. Si vous souhaitez évaluer la rapidité de votre ListView est rendu, consultez l'outil de profilage GPU, qui fournit un moyen graphique permettant de visualiser les performances de mise en page.

En utilisant une base ArrayAdapter

Pour utiliser un ArrayAdapter de base. vous avez juste besoin d'initialiser l'adaptateur et fixer l'adaptateur au ListView. Tout d'abord, nous initialisons l'adaptateur:







Maintenant, nous avons juste besoin de se connecter cet adaptateur à un ListView être peuplé:

Par défaut, il va maintenant convertir chaque élément du tableau de données dans une vue en appelant toString sur l'élément, puis attribuer le résultat que la valeur d'un TextView (simple_list_item_1.xml) qui apparaît comme la ligne de cet élément de données. Si l'application nécessite une traduction plus complexe entre ce point et Vue alors nous devons créer un ArrayAdapter personnalisé à la place.

L'utilisation d'un ArrayAdapter personnalisé

Lorsque nous voulons afficher une série d'éléments dans une liste à l'aide d'une représentation personnalisée des éléments, nous avons besoin d'utiliser notre propre mise en page XML personnalisé pour chaque élément. Pour ce faire, nous devons créer notre propre classe ArrayAdapter personnalisée. Voir cette prise en pension pour le code source. Tout d'abord, nous avons souvent besoin de définir un modèle pour représenter les données dans chaque élément de la liste.

Définition du modèle

Étant donné un objet Java qui a certains domaines définis comme une classe utilisateur:

Nous pouvons créer un ListView personnalisé d'objets de l'utilisateur par le sous-classement ArrayAdapter pour décrire comment traduire l'objet en vue au sein de cette classe, puis l'utiliser comme tout autre adaptateur.

Création de la vue modèle

Ensuite, il faut créer une mise en page XML qui représente le modèle de vue pour chaque élément dans res / layout / item_user.xml:

Définition de l'adaptateur

Ensuite, il faut définir l'adaptateur pour décrire le processus de conversion de l'objet Java à une vue (dans la méthode getView). L'approche naïve de cette (sans mise en cache de vue) se présente comme suit:

Cette carte a un constructeur et une méthode getView () pour décrire la traduction entre l'élément de données et la vue à afficher.
getView () est la méthode qui retourne la vue réelle utilisée comme une ligne dans la ListView à une position particulière. Une autre méthode utilisée est getItem () qui est déjà présent dans la classe ArrayAdapter et sa tâche est d'obtenir simplement l'élément de données associé à la position spécifiée dans l'ensemble de données qui est associé à ce ArrayAdapter.

Fixation de l'adaptateur à un ListView

Maintenant, nous pouvons utiliser cette carte dans l'activité pour afficher un tableau d'éléments dans le ListView:

À ce stade, le ListView est maintenant lié avec succès aux données du tableau des utilisateurs.

Peuplant données dans ListView

Une fois que l'adaptateur est fixé, les éléments seront automatiquement dans le ListView en fonction du contenu du tableau. Vous pouvez ajouter de nouveaux éléments à l'adaptateur à tout moment:

qui ajoutera les nouveaux éléments à la liste. Vous pouvez également effacer à tout moment la liste entière avec:

En utilisant l'adaptateur maintenant, vous pouvez ajouter, supprimer et modifier les utilisateurs et les éléments dans le ListView reflète automatiquement les changements.

Modèles de la source Constructing externe

Afin de créer des instances de modèle, vous serez probablement charger les données provenant d'une source externe (base de données ou REST API JSON), vous devez donc créer deux méthodes supplémentaires dans chaque modèle pour permettre la construction d'une liste ou un élément singulier si la données proviennent d'une API JSON:

Pour plus de détails, consultez notre guide sur la conversion JSON dans un modèle. Si vous n'utilisez une source JSON pour vos données, vous pouvez sauter cette étape.

Fixation des gestionnaires d'événements Dans Adaptateur

Au sein d'un ListView. nous pouvons facilement joindre les écouteurs d'événement sur l'une des vues qui sont la position de l'élément Aware avec:

Vous pouvez également passer de la même un objet entier à travers une étiquette aussi bien comme indiqué ici:

Avec cette approche, vous pouvez facilement accéder à des données en fonction des besoins de l'intérieur des gestionnaires d'événements.

Amélioration de la performance avec le motif ViewHolder

Pour améliorer les performances, il faut modifier l'adaptateur personnalisé en appliquant le modèle ViewHolder qui accélère la population de ListView considérablement la mise en cache de vue pour les recherches chargement de l'article plus lisse, plus rapide:

Personnalisation des lignes Android ListView par Subclassing décrit une stratégie pour obtenir des instances de vue de l'enfant en utilisant une approche similaire en ViewHolder mais sans la sous-classe explicite ViewHolder.

Créé par codepath avec beaucoup d'aide de la communauté. contenu fourni sous licence cc-wiki avec l'attribution nécessaire. Vous êtes libre de remixer et réutiliser, aussi longtemps que vous attribuez et utilisez une licence similaire.







Articles Liés