Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Problema ListView com Imagens

Milton,

É o que eu tinha falado.
Você só está setando a imagem no onPostExecute.
Como a view é reaproveitada, a imagem antiga (de outra linha da lista) continuará sendo exibida enquanto o onPostExecute não for chamado. Considere colocar uma imagem padrão enquanto o onPostExecute não é chamado e também usar uma cache de imagens.
Se estiver com dificuldades sobre o reaproveitamento de views, de uma olhadinha nos links que o pessoal passou ;)

Abs,


2013/5/2 Milton de Oliveira Filho <milton1811@gmail.com>
Carlos,

          Não resolveu. O meu problema é com as imagens que estão sendo carregadas numa thread separada da que carrega a lista. A lista já está toda carregada. Quando deslizo a lista, as imagens ficam embaralhadas. Segue abaixo como o código ficou:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Infla o layout para poder preencher os dados
View view = convertView;
ViewHolder holder;
if (view == null) {
view = inflater.inflate(R.layout.main_friends_search_list_row, null);
holder = new ViewHolder();
holder.mainFriendsSearchListRowImvFriendPicture = (ImageView) view.findViewById(R.id.main_friends_search_list_row_imv_friend_picture);
holder.mainFriendsSearchListRowTxvFriendDescription = (TextView) view.findViewById(R.id.main_friends_search_list_row_txv_friend_description);
holder.mainFriendsSearchListRowTxvFriendEmail = (TextView) view.findViewById(R.id.main_friends_search_list_row_txv_friend_email);
holder.mainFriendsSearchListRowTxvFriendGender = (TextView) view.findViewById(R.id.main_friends_search_list_row_txv_friend_gender);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
// Pega o itemde acordo com a posição
MainFriendsSearchListRowAdapterItem item = data.get(position);
// Preenche os dados
holder.mainFriendsSearchListRowImvFriendPicture.setTag(position);
new LoadClientsLogosTask(holder.mainFriendsSearchListRowImvFriendPicture, position).execute(item.getPictureUri());
holder.mainFriendsSearchListRowTxvFriendDescription.setText(item.getDescription());
holder.mainFriendsSearchListRowTxvFriendEmail.setText(item.getEmail());
holder.mainFriendsSearchListRowTxvFriendGender.setText(item.getGender());
// Retorna a view
return view;
}

private static class ViewHolder {
ImageView mainFriendsSearchListRowImvFriendPicture;
TextView mainFriendsSearchListRowTxvFriendDescription;
TextView mainFriendsSearchListRowTxvFriendEmail;
TextView mainFriendsSearchListRowTxvFriendGender;
}

private class LoadClientsLogosTask extends AsyncTask<String, Integer, Drawable> {
ImageView imageView;
int position;
public LoadClientsLogosTask(ImageView imageView, int position) {
this.position = position;
this.imageView = imageView;
}
@Override
protected Drawable doInBackground(String... arg0) {
return loadFacebookFriendImage(arg0[0]);
}
@Override
protected void onPostExecute(Drawable result) {
if (!imageView.getTag().equals(position)) {
return;
}
if (result != null) {
imageView.setImageDrawable(result);
} else {
imageView.setImageResource(R.drawable.app_img_blank);
}
}
}


Atenciosamente,
Milton de Oliveira Filho


Em 2 de maio de 2013 16:56, Carlos Mendes <cmendesce@gmail.com> escreveu:


--
Carlos Mendes


Em 2 de maio de 2013 13:38, Caio Frota <caiofrota@gmail.com> escreveu:

Milton,

     Estou com o mesmo problema, já resolveu o seu? Se sim, passa aí a solução por favor.





Em 2 de maio de 2013 08:56, luciofm <luciofm@gmail.com> escreveu:

Você precisa entender sobre View recycling dos Adapters.

Quando uma view 'sai' da tela, o framework passa ela como o paremetro convertView no getView para ela ser reusada.

Lúcio Maciel
luciofm@gmail.com


2013/5/2 Milton de Oliveira Filho <milton1811@gmail.com>
Silvio, eu já tentei colocar uma imagem padrão na list_view do próprio layout. Mesmo assim o problema ainda acontece. Qual trecho do código seria interessante postar para facilitar o entendimento do problema?


Atenciosamente,
Milton de Oliveira Filho


Em 2 de maio de 2013 00:21, Silvio Gustavo <sgosantos@gmail.com> escreveu:

Sem o código é meio difícil, mas imagino que você só esteja atualizando o ImageView do Adapter quando a imagem é baixada.
Se for isso, as imagens antigas vão continuar aparecendo em outras linhas quando a view é reaproveitada.
Tente colocar uma imagem padrão se a imagem da view que está sendo atualizada no getView ainda não tiver sido baixada.


2013/5/1 Marcelo Henrique <marcelohd02@gmail.com>
Toda vez que abrir a lista essas imagens serão puxadas?  


Em 1 de maio de 2013 18:06, Milton de Oliveira Filho <milton1811@gmail.com> escreveu:

Amigos,

          Estou enfrentando problemas com uma listView que possui imagens. As imagens são carregadas com o AsyncTask que é disparado no método getView do seu Adapter. Preciso disso para poder carregar as imagens em Background.

          Meu problema é que, quando rolo a tela enquanto as imagens estão sendo carregadas, elas ficam sendo carregadas em outras linhas. Quando o processo é totalmente finalizado, esse problema não acontece mais. O problema é enquanto as imagens estão sendo carregadas e o usuário desliza a lista.

          Algum de vocês já passou por esse problema?

Atenciosamente,
Milton de Oliveira Filho

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
                                              - Marcelo Henrique -
  "Se não puder se destacar pelo talento, vença pelo esforço." (Dave Weinbaum)
              "Mate o pecado antes que ele o mate." ( Richard Baxter )

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Silvio Gustavo de Oliveira Santos
Engenheiro de Software

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Caio Frota
Analista de Sistemas
caiofrota@gmail.com

Imprima somente se necessário. A natureza agradece.


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Silvio Gustavo de Oliveira Santos
Engenheiro de Software

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário