Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Reaproveitar view num ListView

Dae Jonas!

Então cara, na verdade essas imagens que são mostradas nas linhas ja são carregadas a partir de um AsyncTask. Só que apenas na primeira vez que são exibidas. A aplicação faz então o download delas e armazena no device a imagem e o caminho dela em relação ao item da lista pra que da proxima vez, ela seja carregar via I/O ( o que torna bem mais rápido ).

Usando o cache pra armazenas os widgets do modo que eu tinha montado, da uma diferença enooorme na lista em relação à performance.. 
Só que tem todos esses problemas que comentei, e que vc citou..  =/

Estou vendo aqui como implementar com os metodos getItemViewType e getViewTypeCount, pra ver se vai resolver.
Mas qualquer outra idéia será de boa ajuda!

Valews!



Em 11 de novembro de 2011 11:25, Jonas Alves <jonasfa@gmail.com> escreveu:
O custo de montar a linha da sua lista não deveria ser tão custoso quanto você está falando. Por acaso você está fazendo download de imagens ou outro tipo de I/O na thread principal? Se sim, use uma AsyncTask para fazer isso em outra thread.

Não faça cache de views. Isso vai aumentar o consumo de memória do seu app desnecessariamente (podendo até provocar um erro de OutOfMemory) e, pior ainda, pode leakar sua activity inteira dependendo de como você fizer.
Faça cache apenas de imagens ou outros recursos remotos (considere fazer cache no sistema de arquivos se a quantidade de itens for grande ou desconhecida) e use a convertView recebida no Adapter.getView para reciclar as views.


2011/11/11 Elison Lusvardi <elisonj@gmail.com>
Fala caras, tudo joia?

Estou com um problema num listView de nossa aplicação.
Cada item do listView pode ser formado por widgets diferentes, alguns possuem imagens, outros o layout é diferente, outros possuem botões, etc.

Todos eles tem ações de onClick ou onLongClick - sendo no próprio widget ou em algum botão.

O desempenho então pra montar essa listView acaba sendo bem custoso pra criar cada elemento.

Resolvi então armazenar esses itens em um HashMap<Key, MyWidget> e sempre que for criar um novo item, verificar se ele ja está inserido nesse meu "cache" através da Key.
Até ai tudo bem, ele funciona de modo a buscar esses itens, e reaproveita-los; só que quando vou executar alguma ação com eles, geralmente não funciona.

Ele não detecta mais o onClick, o onLongClick até que ele esteja fora da area de visualização no listView. Por ex.  eu clico na foto para abrir ela e não acontece nada. Mas quando eu dou um scroll pra cima ou pra baixo, qdo essa foto sai da minha vista, a app exibe a foto com o visualizador.  Se eu aperto umas 3 ou 4 vezes seguidas, quando eu mover o Scroll, o visualizador vai ser aberto 3 ou 4 vezes..   =/

Alguém tem alguma idéia do por que isso ocorre?

valews!





--
Elison José Gracite Lusvardi



--
Jonas Alves



--
Elison José Gracite Lusvardi

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

0 comentários:

Postar um comentário