J'ai un ListView avec une image chargée par Picasso en utilisant dans mon adaptateur getView()
:
if (item.getPicture().contains("http")) {
Picasso.with(context).load(item.getPicture()).placeholder(R.drawable.default_picture).into(holder.imageView);
}
Seule la première cellule obtient une image l'autre 2affiche la default_picture. Lorsque je fais défiler toutes les autres cellules ont une image. Lorsque je fais défiler vers le haut, les 2 cellules vides affichent maintenant une image. Est-ce que quelqu'un a déjà vu ça? Quelqu'un at-il une idée de la façon dont je peux déboguer?
Réponses:
1 pour la réponse № 1Certaines images ne se chargent pas car l'URL est vide ou ne contient pas "http".
La raison pour laquelle vous voyez que les cellules vides deviennent non vides est que les vues sont recyclées. Vous devez donc appeler Picasso ou définir l’image par défaut pour votre ImageView
manuellement dans getView()
, mais vous ne pouvez jamais quitter le ImageView
intacte.
Comme vous n’appelez que Picasso conditionnellement sans toujours effacer l’image, puis, lorsque l’URL est vide ou ne contient pas "http", votre ImageView
contiendra toujours l'image précédente de la cellule recyclée.
Alors changez votre code comme ceci:
if ((item.getPicture() != null) && item.getPicture().contains("http")) {
Picasso.with(context).load(item.getPicture()).placeholder(R.drawable.default_picture).into(holder.imageView);
} else {
holder.imageview.setImageResource(R.drawable.default_picture);
}