Jump to content

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

Link to comment
Share on other 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

Link to comment
Share on other 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);
}
...

Link to comment
Share on other 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
   }
 }

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...