web-dev-qa-db-fra.com

ArrayAdapter dans Android pour créer une liste simple

J'ai essayé de créer un Activity sous Android. Cette activité ne contient qu'un ListView rien d'autre.

Comme je sais que pour remplir la liste, nous devons utiliser un ArrayAdapter.

Donc, pour comprendre le ArrayAdapter, j'ai lu le lien suivant:

http://developer.Android.com/reference/Android/widget/ArrayAdapter.html

Mais je suis toujours incapable de comprendre clairement!

L'un des principaux doutes est de savoir pourquoi le constructeur a besoin d'un identifiant de ressource TextView alors que mon activité n'a pas de TextViews ce que je devrais avoir à lui donner?

Je ne dis pas que c'est le seul constructeur, juste que je suis incapable de comprendre la logique derrière tout cela.

Afin de créer une simple listview, j'ai aussi fait référence au lien suivant:

Simple ListView utilisant l'exemple ArrayAdapter.

Mais là encore, mon principal doute est de savoir pourquoi un identifiant de ressource TextView est-il nécessaire?

Si quelqu'un peut l'expliquer avec un exemple, ce sera très utile.

EDIT:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
          Android.R.layout.simple_list_item_1, Android.R.id.text1, values);
61
Nirav Kamani

ArrayAdapter utilise un TextView pour afficher chacun de ses éléments. En coulisse, il utilise la méthode toString() de chaque objet qu'il contient et l'affiche dans TextView. ArrayAdapter possède un certain nombre de constructeurs pouvant être utilisés. Celui que vous avez utilisé dans votre exemple est le suivant:

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

Par défaut, ArrayAdapter utilise le TextView par défaut pour afficher chaque élément. Mais si vous le souhaitez, vous pouvez créer votre propre TextView et implémenter toute conception complexe de votre choix en étendant la classe TextView. Cela devrait ensuite aller dans la mise en page pour votre usage. Vous pouvez référencer cela dans le champ textViewResourceId pour lier les objets à cette vue au lieu de la valeur par défaut.

Pour votre utilisation, je vous suggérerais d'utiliser le constructeur:

ArrayAdapter(Context context, int resource, T[] objects). 

Dans votre cas, ce serait:

ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, values)

et ça devrait aller. Cela liera chaque chaîne à l’affichage TextView par défaut - fond blanc simple et clair.

Donc, pour répondre à votre question, vous n’avez pas besoin d’utiliser textViewResourceId.

71
ucsunil

Mais encore une fois principal doute, pourquoi l'id de ressource TextView dont il a besoin?

Regardez le constructeur et les params.

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

Ajouté dans le constructeur de niveau 1 de l'API

Paramètres

context Le contexte actuel.

resource ID de ressource pour un fichier de présentation contenant une présentation à utiliser lors de l'instanciation des vues.

textViewResourceId L'identifiant de TextView dans la ressource de présentation à renseigner. Les objets à représenter dans le ListView.

Android.R.id.text1 fait référence à l'id du texte dans la ressource Android. Donc, vous n'avez pas besoin de celui-ci dans votre activité.

Voici la liste complète

http://developer.Android.com/reference/Android/R.id.html

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        Android.R.layout.simple_list_item_1, Android.R.id.text1, values);

this fait référence au contexte de l'activité

Android.R.layout.simple_list_item_1 simple_list_item_1 est la présentation dans Android.R.layout.

Android.R.id.text1 fait référence à l'ID de ressource Android.

values est un tableau de chaînes du lien que vous avez fourni

http://developer.Android.com/reference/Android/R.layout.html

21
Raghunandan
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

Ici, ressource signifie l'id de la mise en page que vous utilisez lors de l'instanciation de la vue.

Maintenant, cette mise en page comporte de nombreuses vues enfants avec leurs propres identifiants. Ainsi, textViewResourceId indique quelle vue enfant nous devons remplir avec les données.

3
Prashant K

L'identifiant de ressource TextView dont il a besoin est pour un fichier de mise en page TextView, il ne fera donc pas partie de la même activité.

Vous pouvez le créer en sélectionnant Fichier> Nouveau> XML> Fichier de présentation XML et en entrant le type de widget, "TextView" dans le champ de la balise racine.

Source: https://www.kompulsa.com/the-simplest-way-to-implement-an-Android-listview/

2
Nicholas Brown
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

Je suis aussi nouveau sur Android, alors je me trompe peut-être. Mais selon ma compréhension, lors de l’utilisation de ceci pour la création d’une liste vue, le deuxième argument est la disposition des éléments de la liste. Une mise en page se compose de plusieurs vues (vue image, vue texte, etc.). Avec le 3ème argument, vous spécifiez dans quelle vue ou dans quelle vue de texte vous voulez que le texte soit affiché.

2
Anuj Mahajan

Vous n'avez pas besoin d'utiliser id pour textview. Vous pouvez en apprendre davantage grâce à Android arrayadapter . Le code ci-dessous initialise le tableau.

ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.single_item, eatables);
1
Rajat Ghai

Pour votre question, la réponse est Android.R.id.text1 is int: L'id de TextView dans la ressource de présentation à renseigner.

ArrayAdapter a tellement de constructeurs avec un nombre différent d'arguments que je mentionne certains d'entre eux

ArrayAdapter(Context context, int resource)
ArrayAdapter(Context context, int resource, int textViewResourceId)
ArrayAdapter(Context context, int resource, T[] objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int resource, List<T> objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

Maintenant, vous pouvez comprendre que chaque constructeur est différent et qu'ils utilisaient une liste d'arguments différente.

Et la réponse est simple: vous pouvez utiliser ArrayAdapter avec une vue de texte dans un fichier xml cible ou sans. Ce n'est pas grave. Et vous n'avez pas besoin de spécifier un identifiant d'affichage de texte sans lequel vous pouvez l'utiliser. Mais vous devrez peut-être utiliser une option avancée avec votre vue liste simple, vous devez choisir une vue texte.!

Voici un exemple

ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.ListView,StringArray);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

C'est aussi un code valide que vous pouvez utiliser avec beaucoup plus de clarté.

1

Si vous avez plusieurs vues dans le fichier de mise en forme Android.R.layout.simple_list_item_1, vous devrez alors passer le troisième argument Android.R.id.text1 pour spécifier la vue qui doit être remplie avec les éléments du tableau (valeurs). Mais si votre fichier de mise en page ne contient qu'une seule vue, il n'est pas nécessaire de spécifier le troisième argument.

0
Himanshu Singh