Bonjour à tous,
Je me confronte aujourd'hui à un nouveau problème, après avoir passé l'après-midi dessus.
Dans l'application que je développe, il y a une listeView "personnalisée" qui contient une image à gauche, deux editText au milieu, puis une autre image à droite.
Mon problème est le suivant : l'image de gauche correspond à une image se trouvant sur internet.
Pour éviter de rester trop longtemps bloqué, l'application affiche dans un premier temps la ListView avec une image par défaut, enregistré dans l'application.
Dans un second temps, la ListView doit se réactualiser en affichant les images téléchargées. Et c'est là que ça coince.
Code xml pour structure les éléments de la ListView (list_item.xml) : 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
44
45
46
47
48
49
50
51
52 <?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="fill_parent" android:padding="1dp" android:background="#FFF" android:orientation="horizontal" > <ImageView android:id="@+id/itemImagePhoto" android:layout_width="45dp" android:layout_height="45dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_toRightOf="@id/itemImagePhoto" android:orientation="vertical" > <TextView android:id="@+id/itemTexteNom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="1dp" android:paddingRight="46dp" android:textStyle="bold" android:textColor="#000" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:id="@+id/itemTexteMarque" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="1dp" android:paddingRight="46dp" android:textColor="#000" android:textAppearance="?android:attr/textAppearanceSmall" /> </LinearLayout> <ImageView android:id="@+id/itemImageNote" android:layout_width="45dp" android:layout_height="45dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" /> </RelativeLayout>
Le remplissage de base, effectué par une AsyncTask "ProductsTask", se déroule correctement.
Dans un ArrayList, j'enregistre un HashMap pour chaque produit (qui contient les couples clé/valeur pour remplir l'adapter selon img, nom, marque, et note).
Dans ce premier remplissage, je met donc une image intégrée dans l'application, en attendant qu'une autre tâche télécharge les images sur internet. Cette image étant localisable via R.drawable.nom, il n'y a aucun problème avec cet adapter.
Code du premier remplissage de la listView, par une AsyncTask : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 /*** Premier remplissage de la listView, par une AsyncTask ***/ ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); ... SimpleAdapter adapter = new SimpleAdapter (context, list, R.layout.list_item, new String[] {"img", "nom", "marque", "note"}, new int[] {R.id.itemImagePhoto, R.id.itemTexteNom, R.id.itemTexteMarque, R.id.itemImageNote}); this.listView.setAdapter(adapter);
Le problème survient peu après. Les images téléchargées sur internet sont sous la forme d'un objet "BitMap", alors que l'adapter souhaite un entier en paramètre, ciblant une ressource inscrite dans la classe R.
Après avoir parcouru le site des ressources Android, et après quelques recherches et réflexion, j'ai pensé à quelques pistes : utiliser LayoutInflater, créé ma propre classe Adapter, créer ma propre classe ListView.
Cependant, je ne suis à l'aise avec aucun de ces pistes, et c'est pourquoi j'aimerais avoir vos avis et conseils.
Ou alors, peut-être faut-il procéder autrement ?
Je vous remercie d'avance pour vos réponses.
Partager