Aller au contenu

Images dupliquées dans ListView


kent99

Recommended Posts

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

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

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...