Bonjour
J'ai créé une listView pour pouvoir afficher plusieurs "fiches" les une sous les autre, avec a chaque fois une image sur la droite, et quelque champs text sur la gauche.
Jusque là, pas de soucis particulier... pour genre 3 fiches.
Le problème, c'est que maintenant, j'ai besoin de les mettre en favoris si l'utilisateur souhaite garder une trace de la fiche, et lorsque qu'il y a plusieurs favoris (genre 6 ou plus), ils référence tous la bonne fiche (je le sais car, lorsque je clique sur un item, sa fiche complète s'affiche dans une nouvelle activité, et c'est bien la bonne), mais l'affichage au niveau de la ListView n'est plus bon du tout, il y a des sorte de copie, et il suffit que je descende tout en bas, que je remonte, et que je redescende, et l'item a changé d'apparence (mais, je précise, il référence toujours le bon objet, c'est juste l'affichage de la ListView qui est mauvais)
Bref, je pense que vous avez compris.
Je pense qu'il doit y avoir un problème au niveau de mon adapter.
J'en profite également pour demander de l'aide sur l'affichage différé d'une image de ma listView, vu que c'est le même code.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 public class DescriptionVinsAdapter extends BaseAdapter{ private ArrayList<VinsJson> vins; private LayoutInflater myInflater; private static Context mContext; int mPosition; ViewHolder mHolder; private class DownloadFilesTask extends AsyncTask<String, Integer, Long> { @Override protected Long doInBackground(String... urls) { Bitmap image = telechargerImage(urls[0]); mHolder.image.setImageBitmap(image); return null; } } public DescriptionVinsAdapter(Context context, ArrayList<VinsJson> _vins) { this.myInflater = LayoutInflater.from(context); this.vins = _vins; mContext = context; } @Override public int getCount() { return this.vins.size(); } @Override public Object getItem(int arg0) { return this.vins.get(arg0); } @Override public long getItemId(int position) { return position; } public static class ViewHolder { ImageView image; TextView nom; TextView appellation; TextView prix; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { mPosition = position; mHolder = holder; convertView = myInflater.inflate(R.layout.item_vin, null); holder = new ViewHolder(); holder.image = (ImageView) convertView.findViewById(R.id.imagePetiteDuVin); holder.nom = (TextView) convertView.findViewById(R.id.nomDuChateau); holder.appellation = (TextView) convertView.findViewById(R.id.appellationDuVin); holder.prix = (TextView) convertView.findViewById(R.id.prixDuVins); convertView.setTag(holder); Bitmap logo = BitmapFactory.decodeResource(mContext.getResources(),mContext.getResources().getIdentifier("com.max:drawable/logo_vinoreco",null,null)); holder.image.setImageBitmap(logo); String mImage = vins.get(position).url_small; // Bitmap image = telechargerImage(mImage); // holder.image.setImageBitmap(image); new DownloadFilesTask().execute(mImage); holder.nom.setText(vins.get(position).nom); holder.appellation.setText(vins.get(position).appellation); holder.prix.setText("Prix : "+vins.get(position).prix); } else { holder = (ViewHolder) convertView.getTag(); } return convertView; } public static Bitmap telechargerImage(String url){ Bitmap bm = null; try{ HttpGet httpRequest = new HttpGet(url); HttpClient httpclient = new DefaultHttpClient(); HttpResponse response = (HttpResponse) httpclient.execute(httpRequest); HttpEntity entity = response.getEntity(); BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(entity); InputStream is = bufferedHttpEntity.getContent(); bm = BitmapFactory.decodeStream(is); is.close(); Log.i("dl image","OK"); } catch(IOException e){ Log.e("Erreur","Erreur IO"); } return bm; } }
En fait, chaque item de ma listView contient une image que je télécharge sur internet, sauf que ca prend du temps, et le temps d'affichage de la list en pâti. Je me suis donc dis que j'allais accélérer l'affichage en mettant a chaque item une image par défaut (logo.png), puis lorsque les image sont fini d'être télécharger, l'image par défaut est remplacé par la nouvelle.
J'ai donc utilisé un asyncTask, mais il semblerais que la solution ne convienne pas, sauf que je sais pas pourquoi.
EDIT : pour ma seconde question, j'ai un peu modifié le code, j'ai rajouté un handler dans le GetView, et j'ai laissé le téléchargement de l'image dans le asynsTask, et j'ai mis la partis "associer l'image a l'imageView" dans le handler.
Ça ne plante plus, mais les image ne sont jamais mis à jour par contre
Cordialement.
Partager