ArrayAdapter dans android pour créer simple listview
J'ai essayé de créer un Activity
dans Android, Cette Activité ne contient qu'un ListView
rien d'autre.
, Comme je le sais 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 le comprendre clairement!
L'un des plus grands doutes est pourquoi le constructeur a besoin d'un id de ressource TextView
pendant mon activité n'a-t-il 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 cela.
Afin de créer un simple listview, j'ai également fait référence au lien suivant:
ListView Simple en utilisant L'exemple ArrayAdapter.
Mais encore une fois mon principal doute est pourquoi il a besoin D'un ID de ressource TextView?
, Si quelqu'un peut l'expliquer avec un exemple, il sera très utile.
Modifier:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
7 réponses
ArrayAdapter utilise un TextView pour afficher chaque élément qu'il contient. Dans les coulisses, il utilise la méthode toString()
de chaque objet qu'il contient et l'affiche dans TextView. ArrayAdapter a un certain nombre de constructeurs qui peut être utilisé et celui que vous avez utilisé dans votre exemple:
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 n'importe quel design complexe extension de la classe TextView. Cela devrait alors aller dans la mise en page pour votre utilisation. Vous pouvez référencer ceci dans le champ textViewResourceId pour lier les objets à cette vue au lieu de la vue par défaut.
Pour votre utilisation, je vous suggère 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 simple.
Donc pour répondre à votre question, vous n'avez pas besoin d'utiliser textViewResourceId.
Mais encore une fois principal doute pourquoi TextView resource id il a besoin?
Regardez le constructeur et les paramètres.
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)
Ajouté dans le constructeur API de niveau 1
Paramètres
context
Le contexte actuel.
resource
L'ID de ressource pour un fichier de mise en page contenant une mise en page à utiliser lors de l'instanciation de vues.
textViewResourceId
l'id du TextView dans la ressource de mise en page à remplir les objets les objets pour représenter dans leListView
.
android.R.id.text1
fait référence à l'id du texte dans la ressource android. Donc, vous n'avez pas besoin d'avoir celui 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 mise en page 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 vous fourni
Http://developer.android.com/reference/android/R.layout.html
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)
Ici, resource signifie l'id de la mise en page que vous utilisez lors de l'instanciation de la vue.
Maintenant, cette mise en page a de nombreuses vues enfants avec leurs propres identifiants. Donc, textViewResourceId
indique quelle vue enfant nous devons remplir avec les données.
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)
Je suis également nouveau sur Android, donc je pourrais me tromper. Mais selon ma compréhension lors de l'utilisation de ceci pour la création de listview, le 2ème argument est la mise en page des éléments de liste. Une mise en page se compose de nombreuses Vues (vue image,Vue texte, etc.). Avec le 3ème argument, vous spécifiez dans quelle vue ou textview vous voulez que le texte soit affiché.
L'id de ressource TextView dont il a besoin est pour un fichier de mise en page TextView, donc il ne sera pas dans la même activité.
Vous pouvez le créer en allant dans Fichier > Nouveau > XML > fichier de mise en page XML, et entrez le type de widget, qui est 'TextView' dans le champ de balise racine.
Source: https://www.kompulsa.com/the-simplest-way-to-implement-an-android-listview/
Vous n'avez pas besoin d'utiliser id pour textview. Vous pouvez en savoir plus sur Android arrayadapter . Le code ci-dessous initialise arrayadapter.
ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.single_item, eatables);
Pour votre question, la réponse est android.R.id.text1
est int: l'id du TextView dans la ressource de mise en page à remplir.
ArrayAdapter a tant de constructeurs avec un nombre différent d'arguments 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 ont utilisé une liste d'arguments différente.
Et la réponse simple est que vous pouvez utiliser ArrayAdapter avec vue texte dans un fichier xml cible ou sans. Il n'a pas d'importance. Et avez-vous pas besoin spécifiez l'ID de vue de texte que vous pouvez utiliser sans. Mais vous devrez peut-être aller avec une option d'avance avec votre vue de liste simple, vous devez aller avec une vue de texte.!
Voici un exemple d'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 clair.