Aventures Android - ListView et adaptateurs

Si vous êtes intéressé par la création modèle personnalisé voir aussi:

Aventures Android - ListView et adaptateurs

Pour diverses raisons, l'une que vous devez faire dans une interface utilisateur Android choses les plus communes est d'afficher une liste des choses que l'utilisateur peut sélectionner. Nous avons déjà étudié la base Picker dans le chapitre 12, mais le ListView est une catégorie plus générale de « sélecteur ».

Si vous êtes familier avec le développement de bureau, vous pensez probablement des listes que l'utilisateur peut choisir entre comme étant semblable à une liste déroulante. les appareils Android et portables ont souvent besoin d'autre chose que juste une petite liste. En raison de la taille limitée de l'écran, il est souvent le cas que l'utilisateur ne peut être montré un aperçu d'un bon nombre de différents articles. Lorsque l'utilisateur sélectionne un élément qu'ils sont ensuite présentés avec plus de détails sur l'élément - une vue détaillée.

Affichage des listes et d'autres collections de données est si commune que Android a un mécanisme qui facilite.

Eh bien, il ne fait plus facilement une fois que vous comprenez comment tout cela fonctionne.

L'idée principale est que pour afficher une collection chaque élément de la collection a une certaine façon d'être converti en un objet View approprié. Il est l'objet Voir que le conteneur affiche pour chaque élément de données dans la collection.

l'adaptateur

Affichage d'une collection d'objets a un certain nombre de similitudes, peu importe ce que la collection d'éléments sont ou ce conteneur est utilisé.

Le conteneur a diverses positions qui sont visibles à l'écran pour l'affichage des éléments. Par exemple, un ListView présente des fentes horizontales, un par élément et un GridView a une grille 2D de fentes.

Chaque conteneur accepte un objet View et affiche dans une fente.

Par exemple, vous pouvez fournir ListView avec des objets TextView et il serait tout simplement afficher du texte dans chacune de ses fentes.

Vous pourriez vous demander pourquoi ne pas simplement fournir un ensemble de chaînes à la ListView et le laisser travailler comment afficher les chaînes sous forme de texte?

Les choses pourraient être organisées de cette façon et il serait plus simple - mais seulement si vous voulez afficher des chaînes.

Si vous souhaitez afficher une liste d'images, par exemple, alors vous auriez besoin d'un ListView qui comprenait des images et ainsi de suite.

Il est beaucoup plus souple pour fournir le récipient avec un ensemble d'objets Voir prépréparés car alors le conteneur a simplement pour afficher l'objet View sans avoir à effectuer des conversions.

Tous les conteneurs qui dérivent de la classe font AdapterView utilisation des adaptateurs pour fournir ce qu'ils affichent en termes d'objets de vue. Ceux-ci comprennent, ainsi que le ListView et GridView, le Spinner, Galerie et StackView.

Nous avons déjà étudié l'utilisation du Spinner et son adaptateur associé dans un chapitre précédent si cette fois-ci est le tour d'un élément d'interface utilisateur plus avancé - le ListView et son adaptateur.

Cette approche a aussi l'avantage que vous pouvez fournir le récipient avec un objet View qui est une mise en page complète à-dire qu'elle pourrait elle-même être un récipient avec beaucoup de vue des objets à afficher. Par exemple, vous pouvez fournir un ListView avec un objet View qui contient une image et un TextView pour créer une liste multimédia des images et du texte.

Bien sûr, si le conteneur ne fait pas la conversion de l'objet de données à l'objet View - vous allez devoir le faire.

C'est là l'adaptateur vient.

Le ListView et les conteneurs GridView à la fois faire usage de la classe ListAdapter comme adaptateur de base.

En général, vous devez prendre la classe ListAdapter et l'étendre pour créer votre propre adaptateur personnalisé qui génère un affichage personnalisé objet pour le conteneur à utiliser dans chacune de ses machines à sous. Le conteneur demande l'objet View à utiliser pour afficher l'option i ou via toute indexation convient le conteneur particulier. L'adaptateur retourne l'objet View et le conteneur affiche - sans se soucier de ce qu'il est ou ce qu'il correspond à.

Cela peut paraître compliqué, mais il se révèle être très simple dans la pratique.

Cependant, pour rendre les choses encore plus simple, il y a aussi un ArrayAdapter qui vous permet d'afficher un élément de texte unique pour chaque élément d'un tableau d'objets arbitraires.

Comment cela peut-il fonctionner éventuellement si l'objet du tableau peut être quelque chose?

La première chose à souligner est que ArrayAdapter est une classe générique et peut accepter un tableau de tout type aussi longtemps que vous spécifiez lorsque vous créez l'instance ArrayAdapter.

La deuxième chose à souligner est que l'adaptateur Array appelle chaque élément méthode toString pour obtenir un texte à afficher dans le récipient - très simple mais aussi très restrictive. En fait, il est assez facile de modifier ce que les écrans ArrayAdapter, ce qui rend plus polyvalent que vous pourriez attendre et donc vaut mieux connaître.

  • Les conteneurs tels que ListView et affichage GridView Voir les objets dans un agencement particulier - sous forme de liste verticale ou sous forme de grille 2D dans ce cas.
  • Un adaptateur convertit les données qui doivent être affichées dans chaque tranche dans un objet de vue approprié.
  • Pour des données complexes et affiche, vous devez créer un adaptateur personnalisé.
  • Dans de nombreux cas, cependant, le ArrayAdapter peut être utilisé. C'est ArrayAdapter est un adaptateur personnalisé prédéfini pour la conversion des tableaux aux objets TextView.
  • Le ArrayAdapter, à la base, peut fournir des objets TextView à un conteneur à partir d'un tableau de tout type simplement en appelant les méthodes toString de l'objet.
  • le ArrayAdapter

    Au lieu de commencer alors par un exemple qui est tout à fait général, il est intéressant de regarder comment le ArrayAdapter est utilisé en conjonction avec un ListView.

    Démarrez un nouveau projet Android Studio est appelé ListViewExample basé sur une activité vierge et d'accepter toutes les valeurs par défaut.

    Pour un exemple simple tout ce que nous allons faire est d'afficher une liste de noms dans un ListView.

    Tout d'abord supprimer l'habituel « Bonjour tout le monde » textView.In le concepteur défiler la palette jusqu'à ce que vous pouvez voir les Contaners et placez un ListView sur la surface de conception. Au moment où le listView n'attribue pas automatiquement un identifiant. Si tel est le type de cas listView dans l'ID dans la fenêtre Propriétés. Si vous le faites alors un contenu factice sera généré pour vous.

    Vous verrez que pour le bien de vous permettre de travailler avec la mise en page du concepteur vous montrer le ListView rempli de quelques deux objets texte de l'article.

    Notre adaptateur va être plus simple que cet écran factice avec une seule ligne de texte.

    Si vous exécutez le programme à ce stade que vous ne verrez pas quoi que ce soit dans le ListView - il sera vide. Le texte que vous voyez dans le concepteur est juste pour vous aider à visualiser l'interface utilisateur - il n'y a pas d'adaptateur associé au ListView et donc lorsque vous l'exécutez n'y a rien à afficher.

    Notre tâche suivante consiste à créer un objet ArrayAdapter pour fournir ListView quelque chose à afficher.

    Mais d'abord, nous avons besoin d'un tableau de chaîne pour contenir le texte que nous allons afficher. Pour simplifier, nous pourrions aussi bien ajouter le code à la méthode onCreate dans MyActivity.java. Pour créer un simple tableau de chaînes, nous pouvons utiliser un littéral:

    ne hésitez pas à imaginer quelque chose de plus créatif que A, B, C. Dans le monde réel Lices serait probablement lu à partir d'un fichier ou d'une base de données, etc.

    Ensuite, nous devons créer le ArrayAdapter. Pour ce faire, le constructeur besoin du contexte, en général cela, une mise en page à utiliser pour afficher chaque chaîne et le tableau de chaînes:

    ArrayAdapter myAdapter = new
    ArrayAdapter(
    ce,
    android.R.layout.simple_list_item_1,
    myStringArray);

    Remarquez la manière que le type du tableau est spécifié comme . Si vous n'êtes pas familier avec Java génériques alors vous devez regarder comment tout cela fonctionne. Notez également l'utilisation de la mise en page standard fourni simple_list_item1. Vous pouvez créer vos propres mises en page et nous verrons comment cela se fait dans un instant.

    Enfin, nous devons associer l'adaptateur à l'ListView:

    ListView myList =
    (ListView) findViewById (R.id.listView);
    myList.setAdapter (myAdapter);

    La méthode onCreate complète est:

    onCreate protégé void (
    Ensemble savedInstanceState) super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    String [] = myStringArray;
    ArrayAdapter myAdapter = new
    ArrayAdapter(
    ce,
    android.R.layout.simple_list_item_1,
    myStringArray);
    ListView myList = (ListView)
    findViewById (R.id.listView);
    myList.setAdapter (myAdapter);
    >

    Vous aurez également de se rappeler d'ajouter des déclarations d'importation pour chacune des classes utilisées - ListView et ArrayAdapter - ne pas oublier Alt-Entrée.

    Si vous exécutez maintenant le programme que vous verrez une liste soignée avec chaque élément de tableau affiché sur une ligne - comme promis.

    Jusqu'à présent, cela ne semble pas impressionnant mais le ListView vous donne quelques équipements de base. Par exemple, si vous augmentez le nombre d'éléments du tableau:

    Vous découvrirez que vous pouvez faire défiler automatiquement la liste en utilisant le geste de film d'habitude.

    Articles Liés