Bonjour,
Dans le cadre de mon appli android, j'essaye d'afficher le contenu d'un fichier. Pour l'instant, j'ai voulu m'entraîne en l'affichant sous forme d'une listView.
J'arrive à parcourir mon arborescence, et je créé un Hashmap avec le nom, et le chemin du fichier.
J'ai trouvé en cherchant sur le web une chose qui a l'air très sympa : les adapters. J'ai donc essayé d'en utiliser un :
Ne faites pas attention à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 HashMap<String, String> tampon; if(fichiersMusique != null){ for(File fichier : fichiersMusique) { //Si ce n'est pas un fichier caché et que c'est un fichier audio if(!fichier.isHidden() && (new Fichier(fichier).estFichierAudio())){ tampon = new HashMap<String, String>(); tampon.put("Nom du fichier", fichier.getName()); tampon.put("Chemin du fichier", fichier.getAbsolutePath()); listeFichier.add(tampon); } } if((listeFichier.size() < 1)){ Logs.affichage(MainActivity.getContexte(), "Vous n'avez pas de fichier musical !"); }else{ ListAdapter adapter = new SimpleAdapter(contexte, //Valeurs à insérer listeFichier, /* * Layout de chaque élément (là, il s'agit d'un layout par défaut * pour avoir deux textes l'un au-dessus de l'autre, c'est pourquoi on * n'affiche que le nom et le numéro d'une personne) */ R.layout.listeview, /* * Les clés des informations à afficher pour chaque élément : * - la valeur associée à la clé « text1 » sera la première information * - la valeur associée à la clé « text2 » sera la seconde information */ new String[] {"Nom du fichier", "Chemin du fichier"}, /* * Enfin, les layouts à appliquer à chaque widget de notre élément * (ce sont des layouts fournis par défaut) : * - la première information appliquera le layout « android.R.id.text1 » * - la seconde information appliquera le layout « android.R.id.text2 » */ new int[] {android.R.id.text1, android.R.id.text2 }); //Pour finir, on donne à la ListView le SimpleAdapter listView.setAdapter(adapter); } }, je sais que c'est vraiment crados, je corrige ça dès que j'aurai fini ce message
Code : Sélectionner tout - Visualiser dans une fenêtre à part MainActivity.getContexte()
Je sais que je peux utiliser un arrayAdapter, mais que j'utilise celui-ci ou le simpleAdapter, ma question est la même.
Voici mon layout pour ma listView :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip" > <TextView android:id="@+id/secondLine" android:layout_width="fill_parent" android:layout_height="26dip" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:ellipsize="marquee" android:singleLine="true" android:text="Description" android:textSize="12sp" /> <TextView android:id="@+id/firstLine" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@id/secondLine" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" android:gravity="center_vertical" android:text="Example application" android:textSize="16sp" /> </RelativeLayout>
En ce qui concerne les paramètres, je donne le contexte, les données, le layout de la listView ( j'ai créé un fichier XML avec le layout que je souhaite ), les clés dans le HashMap auxquelles vont correspondre les infos que je souhaite afficher, et le dernier paramètre, je ne le comprends pas.
Le tuto que j'ai suivi ne détaille pas assez à mon goût ce "layout d'item". En effet, le code fonctionne avec la méthode qu'il donne sur le tuto, càd en utilisant les id de layout de base d'android, mais où placer mes propres layout de ligne ? Il ne correspondent pas à ceux que j'ai précisé dans mon fichier listView ? Je trouve ça un peut bizarre de devoir donner l'id d'un layout correspondant à la ligne que l'on veut afficher alors que plus haut on donne un layout à la listView ( et qu'on ne peut pas utiliser l'id des textview la composant par exemple .. )
J'espère avoir réussi à être assez clair
Merci d'avance,
Julien
Partager