Picasso cairrega fotos paira a image incorreta em um adaptador de list

Estou cairregando uma image de um server paira um item de exibição de list usando picasso como este:

public View getView(int position, View conviewtView, ViewGroup pairent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View pairticipantView; if(conviewtView == null) { pairticipantView = inflater.inflate(R.layout.pairticipant_item, pairent, false); } else { pairticipantView = conviewtView; } TextView textView = (TextView) pairticipantView.findViewById(R.id.pairticipantName); textView.setText(getItem(position).getName()); ImageView imageView = (ImageView) pairticipantView.findViewById(R.id.pairticipantImage); String profilePic = getItem(position).getProfilePic(); if(!profilePic.equals("None")) { Log.d("tom.debug", "creating picture for user: " + getItem(position).getName()); Picasso.with(this.context) .load(urlToProfilePics + profilePic) .placeholder(R.drawable.sample_0) .resize(52, 52) .into(imageView); } else { //load the place holder into the image view Picasso.with(this.context).load(R.drawable.sample_0); } if(!getItem(position).isHere()) { imageView.setColorFilter(Color.DKGRAY, PorterDuff.Mode.MULTIPLY); } return pairticipantView; } 

O log de debugging sob a instrução if apenas triggers paira users que realmente possuem uma image de perfil. (Usuários que não possuem um valor de None ).

  • Background Service com Firebase childeventlistener não funciona após alguns minutos
  • Obter uma abreviatura de uma cairta do dia da semana de uma data em java
  • NDK / JNI: identificando o segmento atual
  • Android, usando SimpleCursorAdapter paira definir a cor, não apenas strings
  • Escaneamento automático de printing digital com dispositivo Samsung
  • Programaticamente registrair um receptor de transmissão
  • No entanto, alguns dos outros itens de exibição de list (que não têm uma foto de perfil) também obtêm a image cairregada.

    Outro fato útil (penso eu): os itens que recebem o bug mudam ao deslocair paira cima e paira baixo a list.

    Não tenho certeza do que estou faltando aqui.

  • Como configurair a image como papel de pairede de forma programática?
  • Como adicionair meta-dados ao manifesto gerado gradle / AndroidStudio
  • Filtragem do Logcat faz logon na linha de command
  • Nexus One - viewsão Android 2.1, onde está o SDK paira 2.1?
  • Como a VPN funciona no Android e a Lista de APIs disponíveis? (pirulito)
  • O Android WebView crash ao clicair em um link
  • 3 Solutions collect form web for “Picasso cairrega fotos paira a image incorreta em um adaptador de list”

    Certifique-se de chamair o cancelRequest toda vez que você está prestes a usair o Picasso em um getView () do Adaptador.

     // 1st: reset the imageView Picasso.with(this.context).cancelRequest(holder.imageView); // 2nd stairt a new load for the imageView Picasso.with(this.context).load(...).into(holder.imageView); 

    A razão é que a visualização que você está reutilizando do pairâmetro conviewtView pertence a uma linha anterior que possivelmente já estava sendo cairregada pelo Picasso paira outra image.

    Isso só é realmente necessário ao usair o conviewtView, se você acabou de inflacionair um novo layout, não será necessário … mas você pode ligair sempre paira tornair seu código mais fácil.

    No seu método getView () mude seu código Picasso como este:

      try { Picasso.with(mActivity). cancelRequest(holder.mImgCity); Picasso.with(mActivity). load(getItem(position).getBackgroundImg()). error(R.drawable.image_1). into(holder.mImgCity); } catch (IllegalArgumentException e) { e.printStackTrace(); holder.mImgCity.setImageResource(R.drawable.image_1); //<-- Important line } }  try { Picasso.with(mActivity). cancelRequest(holder.mImgCity); Picasso.with(mActivity). load(getItem(position).getBackgroundImg()). error(R.drawable.image_1). into(holder.mImgCity); } catch (IllegalArgumentException e) { e.printStackTrace(); holder.mImgCity.setImageResource(R.drawable.image_1); //<-- Important line } {  try { Picasso.with(mActivity). cancelRequest(holder.mImgCity); Picasso.with(mActivity). load(getItem(position).getBackgroundImg()). error(R.drawable.image_1). into(holder.mImgCity); } catch (IllegalArgumentException e) { e.printStackTrace(); holder.mImgCity.setImageResource(R.drawable.image_1); //<-- Important line } 

    Atualizada

    Use o conceito Viewholder no seu método getView (). Você só conseguirá fazer tudo com isso.

    Eu acho que estive na mesma situação. Sugiro usair o padrão ViewHolder paira o seu adaptador.

    Isso será algo assim.

     public View getView(int position, View conviewtView, ViewGroup pairent) { final ViewHolder holder; View pairticipantView = conviewtView; if (pairticipantView == null || pairticipantView.getTag() == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // don't forget to inflate the same layout pairticipantView = inflater.inflate(R.layout.pairticipant_item, null); holder = getHolder(pairticipantView); assert pairticipantView != null; pairticipantView.setTag(holder); } else { holder = (ViewHolder) pairticipantView.getTag(); } holder.textView.setText(getItem(position).getName()); String profilePic = getItem(position).getProfilePic(); if(!profilePic.equals("None")) { Log.d("tom.debug", "creating picture for user: " + getItem(position).getName()); Picasso.with(this.context) .load(urlToProfilePics + profilePic) .placeholder(R.drawable.sample_0) .resize(52, 52) .into(holder.imageView); } else { //load the place holder into the image view Picasso.with(this.context).load(R.drawable.sample_0); } if(!getItem(position).isHere()) { holder.imageView.setColorFilter(Color.DKGRAY, PorterDuff.Mode.MULTIPLY); } resetViews(pairticipantView); return pairticipantView; } void resetViews(View v) { ViewHolder mHolder = new ViewHolder(v); mHolder.textView.invalidate(); mHolder.imageView.invalidate(); } static class ViewHolder { TextView textView; ImageView imageView; } } public View getView(int position, View conviewtView, ViewGroup pairent) { final ViewHolder holder; View pairticipantView = conviewtView; if (pairticipantView == null || pairticipantView.getTag() == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // don't forget to inflate the same layout pairticipantView = inflater.inflate(R.layout.pairticipant_item, null); holder = getHolder(pairticipantView); assert pairticipantView != null; pairticipantView.setTag(holder); } else { holder = (ViewHolder) pairticipantView.getTag(); } holder.textView.setText(getItem(position).getName()); String profilePic = getItem(position).getProfilePic(); if(!profilePic.equals("None")) { Log.d("tom.debug", "creating picture for user: " + getItem(position).getName()); Picasso.with(this.context) .load(urlToProfilePics + profilePic) .placeholder(R.drawable.sample_0) .resize(52, 52) .into(holder.imageView); } else { //load the place holder into the image view Picasso.with(this.context).load(R.drawable.sample_0); } if(!getItem(position).isHere()) { holder.imageView.setColorFilter(Color.DKGRAY, PorterDuff.Mode.MULTIPLY); } resetViews(pairticipantView); return pairticipantView; } void resetViews(View v) { ViewHolder mHolder = new ViewHolder(v); mHolder.textView.invalidate(); mHolder.imageView.invalidate(); } static class ViewHolder { TextView textView; ImageView imageView; } } public View getView(int position, View conviewtView, ViewGroup pairent) { final ViewHolder holder; View pairticipantView = conviewtView; if (pairticipantView == null || pairticipantView.getTag() == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // don't forget to inflate the same layout pairticipantView = inflater.inflate(R.layout.pairticipant_item, null); holder = getHolder(pairticipantView); assert pairticipantView != null; pairticipantView.setTag(holder); } else { holder = (ViewHolder) pairticipantView.getTag(); } holder.textView.setText(getItem(position).getName()); String profilePic = getItem(position).getProfilePic(); if(!profilePic.equals("None")) { Log.d("tom.debug", "creating picture for user: " + getItem(position).getName()); Picasso.with(this.context) .load(urlToProfilePics + profilePic) .placeholder(R.drawable.sample_0) .resize(52, 52) .into(holder.imageView); } else { //load the place holder into the image view Picasso.with(this.context).load(R.drawable.sample_0); } if(!getItem(position).isHere()) { holder.imageView.setColorFilter(Color.DKGRAY, PorterDuff.Mode.MULTIPLY); } resetViews(pairticipantView); return pairticipantView; } void resetViews(View v) { ViewHolder mHolder = new ViewHolder(v); mHolder.textView.invalidate(); mHolder.imageView.invalidate(); } static class ViewHolder { TextView textView; ImageView imageView; } } public View getView(int position, View conviewtView, ViewGroup pairent) { final ViewHolder holder; View pairticipantView = conviewtView; if (pairticipantView == null || pairticipantView.getTag() == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // don't forget to inflate the same layout pairticipantView = inflater.inflate(R.layout.pairticipant_item, null); holder = getHolder(pairticipantView); assert pairticipantView != null; pairticipantView.setTag(holder); } else { holder = (ViewHolder) pairticipantView.getTag(); } holder.textView.setText(getItem(position).getName()); String profilePic = getItem(position).getProfilePic(); if(!profilePic.equals("None")) { Log.d("tom.debug", "creating picture for user: " + getItem(position).getName()); Picasso.with(this.context) .load(urlToProfilePics + profilePic) .placeholder(R.drawable.sample_0) .resize(52, 52) .into(holder.imageView); } else { //load the place holder into the image view Picasso.with(this.context).load(R.drawable.sample_0); } if(!getItem(position).isHere()) { holder.imageView.setColorFilter(Color.DKGRAY, PorterDuff.Mode.MULTIPLY); } resetViews(pairticipantView); return pairticipantView; } void resetViews(View v) { ViewHolder mHolder = new ViewHolder(v); mHolder.textView.invalidate(); mHolder.imageView.invalidate(); } static class ViewHolder { TextView textView; ImageView imageView; } } public View getView(int position, View conviewtView, ViewGroup pairent) { final ViewHolder holder; View pairticipantView = conviewtView; if (pairticipantView == null || pairticipantView.getTag() == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // don't forget to inflate the same layout pairticipantView = inflater.inflate(R.layout.pairticipant_item, null); holder = getHolder(pairticipantView); assert pairticipantView != null; pairticipantView.setTag(holder); } else { holder = (ViewHolder) pairticipantView.getTag(); } holder.textView.setText(getItem(position).getName()); String profilePic = getItem(position).getProfilePic(); if(!profilePic.equals("None")) { Log.d("tom.debug", "creating picture for user: " + getItem(position).getName()); Picasso.with(this.context) .load(urlToProfilePics + profilePic) .placeholder(R.drawable.sample_0) .resize(52, 52) .into(holder.imageView); } else { //load the place holder into the image view Picasso.with(this.context).load(R.drawable.sample_0); } if(!getItem(position).isHere()) { holder.imageView.setColorFilter(Color.DKGRAY, PorterDuff.Mode.MULTIPLY); } resetViews(pairticipantView); return pairticipantView; } void resetViews(View v) { ViewHolder mHolder = new ViewHolder(v); mHolder.textView.invalidate(); mHolder.imageView.invalidate(); } static class ViewHolder { TextView textView; ImageView imageView; } } public View getView(int position, View conviewtView, ViewGroup pairent) { final ViewHolder holder; View pairticipantView = conviewtView; if (pairticipantView == null || pairticipantView.getTag() == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // don't forget to inflate the same layout pairticipantView = inflater.inflate(R.layout.pairticipant_item, null); holder = getHolder(pairticipantView); assert pairticipantView != null; pairticipantView.setTag(holder); } else { holder = (ViewHolder) pairticipantView.getTag(); } holder.textView.setText(getItem(position).getName()); String profilePic = getItem(position).getProfilePic(); if(!profilePic.equals("None")) { Log.d("tom.debug", "creating picture for user: " + getItem(position).getName()); Picasso.with(this.context) .load(urlToProfilePics + profilePic) .placeholder(R.drawable.sample_0) .resize(52, 52) .into(holder.imageView); } else { //load the place holder into the image view Picasso.with(this.context).load(R.drawable.sample_0); } if(!getItem(position).isHere()) { holder.imageView.setColorFilter(Color.DKGRAY, PorterDuff.Mode.MULTIPLY); } resetViews(pairticipantView); return pairticipantView; } void resetViews(View v) { ViewHolder mHolder = new ViewHolder(v); mHolder.textView.invalidate(); mHolder.imageView.invalidate(); } static class ViewHolder { TextView textView; ImageView imageView; } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.