kent99 Posté(e) 24 mars 2013 Share Posté(e) 24 mars 2013 Bonjour, je suis en train de développer une application de prise de notes mais lorsque je scroll vers le bas de mes notes grâce à une listview et que je remonte au début de celle-ci l'image de la dernière note se retrouve sur la 2ème note (les miniatures jointes seront peut-être plus parlantes). J'ai suivi ce tutoriel http://developer.and...lay-bitmap.html pour pouvoir afficher plusieurs images simultanément. Comment corriger cette duplication ? Cordialement Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 25 mars 2013 Share Posté(e) 25 mars 2013 Ton problème doit venir de la façon dont tu gères (ou tu ne gères pas) le recyclage des vues de ta ListView. Dans une ListView, les views qui correspondent à un élément sont réutilisées lorsqu'elles ne sont plus visibles, pour afficher un nouvel élément; il faut donc en tenir compte, et les réinitialiser le cas échéant. C'est sans doute ce qui se passe dans ton cas Lien vers le commentaire Partager sur d’autres sites More sharing options...
kent99 Posté(e) 25 mars 2013 Auteur Share Posté(e) 25 mars 2013 Bonjour, merci de votre réponse, mais comment réinitialiser ces views ? Voici mon code @Override public View getView( final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View view = null; if (convertView == null) { inflater = context.getLayoutInflater(); view = inflater.inflate(R.layout.itemnote_v2, null); final ViewHolder viewHolder = new ViewHolder(); viewHolder.noteContent = (TextView) view.findViewById(R.id.ContentNote); viewHolder.noteDate = (TextView) view.findViewById(R.id.Date); ... viewHolder.layoutContainerAll = (RelativeLayout) view.findViewById(R.id.layoutContainerAll); viewHolder.picture = (ImageView) view.findViewById(R.id.pictureChoose); view.setTag(viewHolder); viewHolder.check.setTag(lesNotes.get(position)); } else { view = convertView; ((ViewHolder) view.getTag()).check.setTag(lesNotes.get(position)); Log.d("View", "View!=null"); if(lesNotes.get(position).getPicture()!=null){ loadBitmap(lesNotes.get(position).getPicture(), ((ViewHolder) view.getTag()).picture); } } final ViewHolder holder = (ViewHolder) view.getTag(); if(lesNotes.get(position).getChecked()==1){ holder.noteContent.setPaintFlags(holder.noteContent.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); } holder.noteContent.setText(lesNotes.get(position).getContent()); if(lesNotes.get(position).getDate().equals("00/00/0000")){ holder.noteDate.setText(""); holder.layoutDateTime.setVisibility(View.GONE); }else{ holder.layoutContainerAll.setVisibility(View.VISIBLE); String dateDisplay = getDay(lesNotes.get(position).getDate()); holder.noteDate.setText(dateDisplay); } if(lesNotes.get(position).getHour().equals("null:null")){ holder.noteHour.setText(""); }else{ holder.noteHour.setText(lesNotes.get(position).getHour()); } if(lesNotes.get(position).getImportance()==1){ holder.importance3.setBackgroundResource(R.drawable.alert_triangle); }else if(lesNotes.get(position).getImportance()==2){ holder.importance3.setBackgroundResource(R.drawable.alert_triangle); holder.importance2.setBackgroundResource(R.drawable.alert_triangle); }else if(lesNotes.get(position).getImportance()==3){ holder.importance1.setBackgroundResource(R.drawable.alert_triangle); holder.importance2.setBackgroundResource(R.drawable.alert_triangle); holder.importance3.setBackgroundResource(R.drawable.alert_triangle); }else{ holder.importance1.setBackgroundResource(0); holder.importance2.setBackgroundResource(0); holder.importance3.setBackgroundResource(0); } if(lesNotes.get(position).getPicture()!=null){ holder.layoutContainerAll.setVisibility(View.VISIBLE); loadBitmap(lesNotes.get(position).getPicture(), holder.picture); } if(!lesNotes.get(position).getLocation().equalsIgnoreCase("")){ holder.layoutLocation.setVisibility(View.VISIBLE); String adresse = lesNotes.get(position).getLocation().split(";")[2]; holder.locationContent.setText(adresse); } if(lesNotes.get(position).getChecked()==1){ holder.check.setChecked(true); }else{ holder.check.setChecked(false); } ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 25 mars 2013 Share Posté(e) 25 mars 2013 Il doit te suffire de réinitialiser l'imageView, dans le cas où tu réutilises la view, mais que tu ne positionnes pas de nouvelle image. Quelque chose comme ça... } else { view = convertView; ((ViewHolder) view.getTag()).check.setTag(lesNotes.get(position)); Log.d("View", "View!=null"); if(lesNotes.get(position).getPicture()!=null){ loadBitmap(lesNotes.get(position).getPicture(), ((ViewHolder) view.getTag()).picture); } else { // Cas else rajouté ((ViewHolder)view.getTag()).picure.setImageDrawable(null); // Réinitialise l'imageview avec une ressource null } } Lien vers le commentaire Partager sur d’autres sites More sharing options...
kent99 Posté(e) 25 mars 2013 Auteur Share Posté(e) 25 mars 2013 Super merci beaucoup ça marche parfaitement. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.