Utilizando CardView, Material Design Android - Parte 4
Blog /Android /Utilizando CardView, Material Design Android - Parte 4
(20060) (58)
No vídeo acima continuamos com a série sobre o Material Design no Android, desta vez mostrando como utilizar o componente visual CardView, um dos componentes do Material Design que mais veio a agregar à todas as possibilidades em interface gráfica desse sistema operacional.
Digo isso, pois o CardView, além de outros pontos, nos permite criar as conhecidas "caixas flutuantes" em layout, algo que antes exigia, ao menos no Android, o uso de imagens 9-Patch. Acredite, era algo nem mesmo perto da simplicidade de uso que temos hoje com o CardView.
Apesar de o conteúdo do vídeo acima ser bem prático, nele também são apresentados alguns aspectos que o próprio guideline do Material Design Android informa como sendo configurações padrões para uso do CardView em projeto. Aspectos como:
Espaçamentos entre Views filhas do CardView;
Posicionamentos dos elementos que são primários, secundários, ...;
Tamanhos de fonte;
Como e onde colocar imagens ou vídeos.
No vídeo, fique atento quanto ao uso de alguns atributos, principalmente o atributo cardMaxElevation que não funcionou comigo quando via código estático, XML. Somente funcionou quando utilizando via Java API (com Kotlin também funcionará sem problemas), com o método setMaxCardElevation().
Próximo ao final do vídeo tem uma implementação de um algoritmo que nos permite colocar bordas arredondadas no ImageView, isso de acordo com nossa escolha de canto, onde no exemplo foram: os cantos do topo, esquerda e direita.
Este mesmo algoritmo também permite redimensionar a imagem, mas confesso que a melhor escolha para enquadrar uma imagem em um CardView é utilizando o atributo android:scaleType do ImageView. O resultado é certamente o esperado em projeto.
Note que o algoritmo completo foi utilizado apenas em versões do Android anteriores a API 21, Lollipop, isso devido aos problemas encontrados com o uso de imagens no CardView nestas versões alvo da aula. Ao menos a partir da API 21 do Android, sinta-se seguro em utilizar o atributo indicado anteriormente, android:scaleType.
Caso você venha tendo inúmeros problemas com imagens, ou vídeos, em CardView devido as versões antigas do Android que o seu projeto atual tem de suportar, a Picasso API certamente pode lhe ajudar com isso, independente da versão Android que precisa ser trabalhada.
No conteúdo do vídeo tem um exemplo onde foi utilizado, de maneira bruta, o valor 14dp para obter o enquadramento correto da imagem no CardView, porém, hoje, eu não recomendo este tipo de estratégia, ela certamente vai falhar em alguns aparelhos, pois a quantidade de tamanhos e densidades de telas diferentes no mundo Android é imensa.
O atributo android:scaleType ou uma API, de terceiro, robusta como a Picasso API, certamente será a melhor opção em termos de enquadramento de mídia, não somente em CardView, mas em qualquer outro ViewGroup em que uma View de mídia binária (imagem, vídeo, áudio), ou subclasse desta, precise ocupar o local exato.
Antes de finalizar mais esta aula da série Material Design Android (não esqueça de assistir à vídeo aula), deixo abaixo alguns links de conteúdos aqui do Blog, com vídeos, que lhe colocarão em dia com o que há de novo no desenvolvimento de aplicativos deste sistema operacional do Google:
E caso você tenha como meta aprender a construir projetos Android, ou evoluir nesta área, também com os conteúdos gratuitos do Blog, então não deixe de acessar a lista exclusiva para estudos em: Estudando Android - Lista de Conteúdos do Blog.
Está, "Utilizando CardView, Material Design Android - Parte 4", é a 4ª aula da série Material Design no Android. A aula anterior, caso você ainda não tenha visto, que também contém vídeo e artigo, é a seguinte:
A próxima aula a está, a 5ª aula, é a seguinte:
Utilizando NavigationDrawer, Material Design Android - Parte 5.
É importante que você siga as aulas na ordem correta para poder tirar o máximo da série e assim evoluir como esperado no mundo de desenvolvimento Android.
CardView - documentação oficial Android
Cards - documentação oficial Material Design
How to make an ImageView with rounded corners? - Resposta de Caspar Harmer e TheFlash
android - material design - cardview - picasso - api - componente visual - cards - caixa flutuante - scaletype
Comentários Blog (58)
Anderson Alencar (1) (0)
Fala Thiengo, cara otimos videos para comunidade, se tivessemos mais profissionais como você seriamos bem melhores.
Cara você tem alguma video aula com a implementação dos CardView
https://material.io/guidelines/components/cards.html#cards-content-blocks
com esse layout: (Avatar, Title, and Subtitle area).
pudesse demonstrar ai agradeceria bastante.
Abraço e Otimo trabalho.
Ainda não tenho nada sobre CardView Content Block. O máximo que cheguei com ele aqui no Blog e canal foi o uso também do Context Menu: http://www.thiengo.com.br/contextmenu-no-recyclerview-material-design-android-parte-17
Enquanto não falo nada sobre esse tipo de CardView aqui no Blog, veja se tem alguma API para card que facilite essa implementação em seu projeto, veja no link a seguir: https://android-arsenal.com/search?q=cardview
Fala Thiengo! O problema é o seguinte, estou usando uma lista RecyclerView de CardView (conforme tu fez nessa app do vídeo) e implementei um Listener de click usando tua interface e o GestureDetector para detectar onde exatamente do CardView o usuário clicou conforme tu fez no vídeo sobre ContextMenu. Mas a ação desejada após o usuário clicar em cima de um ImageView especifico já capturado pelo GestureDetector seria trocar a Imagem somente desse ImageView dentro de tal posição dentro do RecyclerView. Isto é, se clicar no ImageView dentro do CardView da posição X, trocar o conteudo somente desse ImageView da posição X. Mas não consegui achar como fazer, passando por uma interface já tenho a View que guarda do
View cv = grid.findChildViewUnder(e.getX(), e.getY());
e a posição dessa view pelo
.getChildPosition(v)
. Tu sabe como me ajudar?
Coloque o trecho de código que está lhe travando aqui, coloque tb a fonte da nova imagem (um ArrayList, um objeto, ...).
O que pode fazer é criar uma classe que herde de View, nela terá apenas dois atributos além dos métodos e atributos obrigatórios. Um será para a view que já é passada como parâmetro no onClickListener() o outro será sua View (ImageView) que será alterada. Abraço
Fale Thiengo! Acabei conseguindo de um jeito mais simples do que eu esperava, passando a position do cardview dentro do recyclerview e recuperando a view certa usando
View view = rv.getLayoutManager().findViewByPosition(position);
(onde rv é o RecyclerView da Activity) e em seguida setar a imagem normalmente a partir dessa nova View
((ImageView)(view.findViewById(R.id.img_gesto))).setImageResource(R.drawable.img_nova);
. Obrigado pela atenção Thiengo! Abraço.
Show de bola Lucas, abraço
Thiago Melo (0) (0)
Venho seguindo seus vídeos sobre o Material Design e percebi que vc colocou o ItemClick no CardView e que quando clicado abre mais detalhes sobre o carro.
Mas não encontrei o vídeo onde vc ensina essa implementação. Só encontrei o vídeo onde vc colocou um Toast no itemClick.
Se não me engano é nesse vídeo (http://www.thiengo.com.br/utilizando-transitions-material-design-android-parte-10 ) ou anteriores a ele. Abraço
Rafael (3) (0)
Estou com problema em redimensionar imagem, já usei os atributos android:scaleType="center" e android:adjustBounds="true" e não deu certo, as imagem que carrego são de tamanhos diferentes e são cortadas no topo e em baixo.
Outro problema que enfrento é que ao rotacionar a atividade carrega novamente e da erro em doAfter(JSONArray jsonArray) na linha "position = auxPosition == 0 ? mList.size() : 0;" , tem como manter a atividade na rotação?
Junto aos vídeos acompanhe tb a versão mais atual da APP do vídeo, no GitHub (), pois mts erros foram corrigidos até a versão final no GitHub.
Quanto ao tamanho das imagens, tentou adjustViewBounds? Uma solução antiga e core que pode ainda valer (http://stackoverflow.com/a/8233084/2578331 ).
A melhor opção é fornecer mais de uma versão para a imagem, com tamanhos distintos. Abraço
Fabio (4) (0)
Tenho várias imagens de tamanhos diferentes, gostaria de saber como faço para deixar essas imagens proporcionais. Como faço para colocar todas na mesma largura e proporcional na altura.
Fala Faio, blz?
Tente os atributos android:scaleType="center" e android:adjustBounds="true" para ver se funciona como precisa. Abraço
Fabio (3) (0)
Olá Thiengo, obrigado pela ajuda, estou usando o Fresco, e com esses atributos não consegui ajustar as imagens, se mais alguém tiver o mesmo problema consegui com essas dicas http://stackoverflow.com/questions/33955510/facebook-fresco-using-wrap-conent/34075281#34075281.
Mais uma dúvida, na rotação de tela não esta carregando novas imagens do servidor, na vertical funciona mas na horizontal apenas aparecem as imagem já carregadas.
Muito obrigado pelos vídeos e toda ajuda.
Fabio, a principio o que pode fazer é ter a imagem com o mesmo ratio, porém em tamanhos distintos, não necessariamente o tamanho para um device em especifico, pois sabemos que o Android roda em vários tipos de device. Com essas opções de imagens e os atributos já testados anteriormente será possível enquadrar a imagem corretamente. Abraço
Na implementaçao do cardView, estou usando o staggaredGridLayout, estou usando imagens 1:1 e mesmo usando o alignParentTop no ImageView a imagem nao fica no topo do card, e usando o card com width e height match_parent, ele pega toda a tela do celular ao inves de ficar varios cards em grade... alguma soluçao?
Tente colocando como atributo do ImageView utilizado o seguinte: android:scaleType="center" veja se assim vai sem problemas. Abraço
Eu já tentei usar o scaleType, continuou na mesma, o cardView continua pegando toda a tela e a imagem não fica 1:1, ele corta uma parte dela... eu meio que estou fazendo testes de como vai ficar minha aplicação, segui o seus vídeo desde o Toolbar, RecyclerView e ai CardView, você usa a imagem 16:9, eu usei o 1:1 e ficou assim, se eu dou uma dimensão em dp para o card ele fica no tamanho que peço mas a imagem nao alinha no topo, e com match_parent ele pega todo, mesmo com wrap_content ele pega a tela inteira... fiquei meio perdido com isso agora
Lucas, se possível coloque um print do problema em um servidor publico de imagens, para ter uma ideia melhor. E outra, no código mais atual da APP de carros (https://github.com/viniciusthiengo ), esse problema foi resolvido, no caso parei de tentar redimensionar a imagem, apenas setei os width e height do ImageView no card e utilizei i scaleType. Abraço
O link do projeto é esse: https://github.com/viniciusthiengo/tc-material-design
Lucas (0) (0)
Eai Thiengo, lendo alguns comentários aqui do blog eu achei uma solução, usei o adjustViewBounds no imageView e funcionou certinho...
muito obrigado pela atenção e parabéns pelo blog, abraço
Kaleb (1) (0)
Thiengo, muito bom os vídeos , estou acompanhando e estou com um problema puxo imagens para um card view , utilizando o Picasso com URL e não consigo deixar a imagem com o tamanho do local pode me ajudar?
Fala Kaleb, blz?
Está utilizando no ImageView os atributos android:adjustViewBounds="true" android:scaleType="centerCrop" para conseguir que a imagem ocupe todo o espaço? Tente assim se ainda não estiver. Abraço
Bom dia Thiengo, gostaria de saber como faço para dar ação nos cardview, tenho um layout com dois botoes de ação um te fazer uma ligação e outro de mandar email. Isso dentro de uma lista onde tenho varios numeros e email.
Vc consegue no Adapter de seu RecyclerView colocar um listener de click para esses buttons, porém vc pode acabar tendo problemas se ao mesmo tempo quiser colocar o listener de click no CardView por completo para abrir a Activity de detalhes do item, logo, nesse caso seria interessante colocar o listener de click em cada button e depois somente na parte de cima (ou de baixo, depende de seu layout) do CardView colocar o listener de click que abrirá o Activity de detalhes. No vídeo acima será o listener nos button que estariam abaixo da imagem, nesse caso para as ações de call e email, na imagem seria a chamada para a Activity de detalhes. Para colocar os cliques nos itens do CardView veja essa vídeo (http://www.thiengo.com.br/recyclerview-material-design-android-parte-2 ), o de cima tb tem.
Outra forma e provavelmente a mais interessante é a utilização de um ContextMenu, tem esse vídeo (http://www.thiengo.com.br/contextmenu-no-recyclerview-material-design-android-parte-17 ) onde mostro como coloca-lo no RecyclerView. Abraço
Paulo Henrique Alves (1) (0)
Falae Thiengo, blz?
Parabéns pelo tutos! Estou acompanhando a séries de videos e estou curtindo.
Gostaria de informar que estou tomando o problema do espacamento no arredondamento quando utilizando a API 21 e 22. Para essas versões precisei utilizar o workaround do arredondamento da borda.
No projeto que estou usando a única diferença é a versão do buildToolsVersion, estou usando a versão 22.0.1. Em testes que fiz utilizando o projeto do arquivo zip disponibilizado no post também acontece o problema.
Fala Paulo Henrique, blz sim.
Vlw a ajuda. O problema com as bordas é no CardView ou na imagem que é carregada no ImageView? Abraço
O problema é espaçamento que aparece no ImageView.
Imagem do projeto do .zip:
http://i58.tinypic.com/34yzi13.jpg
O meu projeto que estou usando para acompanhar a série fica um espaçamento maior, 3x maior.
Paulo Henrique, tente esse atributo no ImageView:
Com ele a imagem deve encaixar sem problema no place dela. Abraço
Sucesso!! Funcionou.
Giuliano Costa (1) (0)
Olá Tiengo! Valeu pelo video. Esclareceu muita coisa pra mim.
Estou passando por um probleminha que talvez seja fácil de corrigir. Gostaria de um CardView estilo Google Play, aonde podem ter 2, 3 ou 1 grande CardView por linha...
Eu tentei mudar o width mas ele não está ficando lado a lado.
Fala Giuliano, blz?
O que quer implementar não exige mudança no CardView e sim no RecyclerView, mais precisamente no LayoutManager sendo utilizado com ele. Veja esse vídeo (http://www.thiengo.com.br/animacao-onlongpress-e-gridlayoutmanager-em-recyclerview-material-design-android-parte-3 ), nele falo de dois layouts manager (StaggeredGridLayoutManager e GridLayoutManager) que podem ser a solução de seu problema. Abraço
Giuliano (1) (0)
Boa tarde Tiengo! Valeu pela resposta!
Ontem na tentativa e erro eu tinha visto isso logo depois que tu mandou a resposta.
Agora estou passando por outro problema que a lentidão da aplicação. hehehehehe
Cara, eu estou seguindo o seu projeto e as videos aulas na risca mas quase não sai do jeito que fica no final do video... vc faz alguma coisa de diferente no "make in off"? estou desesperado pois meu TCC ta chegando e preciso apresentar logo mas nao consigo deixar os meu projetos com a mesma aparência dos seus...
Fala Gabriel, blz sim.
Faço nada, quando faço algo já aviso no vídeo mesmo que o script XYZ foi alterado antes do vídeo. Faça o seguinte, baixe o projeto que sempre está disponível para download e verifica se está pelo menos com a mesma lógica que o seu. Abraço
Ismael (0) (0)
Então encontrei uma solução assistindo seu vídeo novamente. Não sei se é a mais correta, coloquei os valores abaixo em 14dp sendo que no seu projeto estão em 8dp.
Se rodou da maneira como vc queria e a APP não deu nenhum Exception, então é válida, mas mesmo assim acredito que a solução de ter mais Cards por linha é a melhor escolha. Abraço
Ismael (1) (0)
Olha só estou seguindo sua série de material design, esta me ajudando bastante. Estou seguindo seu projeto(https://github.com/engividal/MaterialDesign ) a partir das video aulas quando compilei no note 4 e minha imagem não preencheu completamente dentro card ja rodei o seu projeto e obtive o mesmo erro. Pode dar alguma dica de como resolver? Desde já agradeço.
Fala Ismael. blz sim.
Na verdade o problema é o tamanho da imagem que deixei no projeto, no caso ou vc utilizaria uma imagem maior ou ao invés de apresentar um único cardView na vertical, colocaria mais de um (essa é a melhor opção). Uns três seria bom. Ou seja, teria de ter um layout diferente para quando fosse tablet. Abraço
Douglas Scriptore (1) (0)
Fala Thiengo fmz? Cara uma duvida, estou realizando consultas no SqlLite do aparelho usando LIMIT e OFFSET, disparo a consulta quando o if(mList.size() == llm.findLastCompletelyVisibleItemPosition() + 1) é TRUE, até ai tudo bem, só que quando em dou scroll para o topo da lista, o comando effect é chamado novamente, como faço para o effect aparecer só com novos itens?
Coloque uma flag na classe dos objetos que estão sendo utilizados na lista que preenche o RecyclerView. Por exemplo, no vídeo acima utilizo a classe Car, logo nela adicionaria o atributo alreadyAnimated com o valor inicial em false, assim que tivesse no adapter o script verificaria para cada item se o atributo alreadyAnimated é false, se sim o script chamaria a animação para esse item, logo após a animação o script mudaria esse atributo para true, logo na próxima vez que esse item passasse pelo script de animação ele não seria animado, pois o condicional seria false devido ao valor do atributo, sendo assim somente os novos itens. Era isso? Abraço
Isso mesmo, vlw o/
Cara estou com mais uma duvida aqui, agora respeito a animação, coloquei a função de animação no metodo onBindViewHolder, ela funciona para quando ja estou dentro do fragment, porem quando meu fragment é chamado pela primeira vez aparece animação Default do RecyclerView, oque poderia estar fazendo para padronizar essas animações?
Fala Douglas, blz sim
Verifique com o LogCat se realmente na primeira vez que entra no fragment se é a animação correta que está chamando, ou se até mesmo está chamando ela (em caso de estar dentro de um condicional e o condicional ser false na primeira vez no fragment). Se possível coloque um try...catch e veja se não está sendo printado nenhum error na primeira entrada ao fragment. Eu utilizo tb animação e não há padrão a ser utilizado, apenas chamar o método com a animação escolhido, porém já tive problemas de a animação hora funcionar e hora não, por isso solicitei que fizesse o teste como try...catch. Abraço
E essa semana vai ter video?
Sim, soltei hj devido a problemas técnicos ontem. Abraço
Thiego quando vc vai lançar a video aula, que explica tipo o campo pesquisa, por exemplo aquela do action bar de pesquisa, vc vai fazer quando neste?
Fala Ruan, na verdade vou fazer, porém não sei lhe dizer exatamente quando. Provavelmente o próximo será sobre o Floating Action Button. Abraço
Miguel Lemos (2) (0)
No aguardo da action bar com pesquisa também, abraços
dario.mahalambe (1) (0)
Oi thiengo queria saber se é possível eu dar acção a um item do cardview. Estou fazendo uma aplicação de divulgação de eventos, onde tenho os cardviews com a foto dos cartazes e que quando clicasse em um item passasse para outra activity com os detalhes do evento .
É possível sim, na verdade com CardView ou Tile não muda nada, se ver os dois vídeos que fiz sobre o RecyclerView vc vai pegar como colocar o ClickListener para funcionar. Não coloquei para chamar outra Activity, mas ai é só acrescentar o startActivity() que vai sem problemas. Segue links dos vídeos se ainda não os viu. Abraço
Muito obrigado thiengo. já consigui dar acção aos items no cardview usei a mesma implementação do vidro RecycleView ...
claudiotimbo123 (1) (0)
opa thiengo beleza ? como eu faço para adicionar essas Libs baixadas no eclipse. Por exemplo no Android Studio você adiciona aquele link no gradle ne ? então queria saber como e que eu faço isso no eclipse .
Fala Claudio, blz sim.
Bom, se não me engano se encontram no projeto lib "android-support-v7-appcompat", verifique se a sua está atualizada (pelo Android SDK Manager), caso não atualize e então tente instanciar as entidades Toolbar, RecyclerView e CardVIew. Porém não esqueça de antes adicionar esse projeto lib ao seu projeto. Recomendo que migre para p AndroidStudio o quanto antes, pois as coisas no eclipse já estão começando a ficar cada vez mais difíceis. Abraço
Oi thiengo, tudo na paz? Muito boa sua aula cara, agora tratando-se de listView eu tenho uma duvida, vc poderia me ajudar? É assim o, eu to fazendo uma aplicação que nela eu tenho uma lista de casas nessa lista eu tenho um imageView(foto da casa) e o nome da cidade, quando o usuario clica em um intem ele vai para outra activity onde eu exibo mais detalhado os dados da casa eu estou carregando essa lista de um bd remoto eu carrego em 10 em 10 sempre exibindo um botão de carregar mais. A minha duvida é quando o usuario rola essa lista e por exemplo carrega 30 itens e ele clica no item quando ele volta pra lista ela carrega apenas as dez ultimas casas q é o que o meu banco esta trazendo. Eu queria saber se tem como eu salvar esses dados ja carregados no onPause e quando o usuario voltar pra lista ele recarregar todos os itens novamente, não entendo muito de ciclo de vida não sei se quando o camarada passa para outra activity a outra é destruída ou apenas pausada, vc com sua grande experiencia poderia me dizer se tem a possibilidade de eu fazer isso? Obrigado msm pela ajuda cara abraços.
Vinícius Thiengo (4) (0)
Fala Gustavo, td na paz sim.
Há várias maneiras de salvar esses dados e evitar o load novamente de seu bd remoto, em seu caso vc precisa somente de uma das maneiras disponíveis tendo em vista que vc quer manter os dados somente enquanto a APP está aberta.
Utilize o onSaveInstanceState (vídeo 1: http://www.thiengo.com.br/otimizando-sua-app-android-com-onsaveinstancestate ) (vídeo 2: http://www.thiengo.com.br/onsaveinstancestate-bitmap-e-serializable-no-android-correcao ), porém antes implemente a interface Parcelable (http://www.thiengo.com.br/parcelable-no-android-entendendo-e-utilizando ) na classe que vc preenche cada item do ListView, provavelmente é a classe Casa. Dessa forma vc vai manter os dados em sua Activity sem a necessidade de utilizar um SQLite (que por sinal recomendo para deixar sua APP trabalhando offline tb) e de realizar o carregamento de itens já carregados anteriormente. É importante que entenda o ciclo de vida da Activity e do Fragment, pelo menos esses.
No vídeo do savedInstanceState utilizei o Serializable para converter os dados em bytes, porém o Parcelable é mais eficiente, utilize ele (como no link do outro vídeo). Ve se assim vai. Abraço
Boa Thiengo, é exatamente disso q eu precisava, só tem um probleminha, na sua implementação vc cria uma classe separada para tratar as imagens correto? vc recebe a imagem do bd remoto converte essa imagem para bitmap e trata ela em uma classe antes de enviar para lista, no meu caso eu estou recebendo as imagens via Broadcast e estou enviado ela(a URL) para uma classe onde eu trato ela no Universal image loader e de la msm eu ja coloco essa imagem no imageView do meu adapter, então eu queria saber de vc, se eu teria q transformar essas imagens q eu recebo no broadcast em bitmap pra fazer esse tratamento q vc fez? ou teria outra forma de eu fazer? não consegui achar uma solução pra isso :/ . Obrigado mais uma vez pela ajuda cara sua dica funcionou perfeitamente só isso ai q ta pegando. Abraços.
Então, nesses vídeos ainda não coloquei para baixar as imagens de um servidor Web, elas estão locais, porém o que vc está fazendo está ok, somente não entendi pq vc está utilizando um Broadcast. Não o utilize para baixar imagens, pois o tempo de execução dele é limitado e vc não pode assumir a conexão do emulador e a conexão WiFi como sendo padrões, pois mt provavelmente quando for para a 3G vai falhar.
Sobre o Bitmap, é isso mesmo, vc terá de ter o Bitmap para utilizar esse script, porém é bem tranquilo criar um Bitmap a partir de um Ressource, ImageView, Url, ... não código grande para isso. Outra forma é utilizar o Picasso lib (http://square.github.io/picasso/ ) com a lib RoundedImageView (https://github.com/vinc3m1/RoundedImageView ), porém se não me engano vc não terá o mesmo poder de fogo do script do vídeo, pois ali vc escolhe quais corners quer arredondar. Abraço
Muito obrigado mesmo cara, consegui resolver o problema das imagens, agora ta funcionando perfeitamente :D Sobre o uso do Broadcast eu o utilizo pq pra o que eu queria fazer ele foi a melhor opção que eu achei msm sabendo que seu tempo de execução é limitado(se não me engano 10 segundos) e justamente pensando nisso eu fiz uma implementação que em 1 em 1 segundo em um loop eterno eu chamo ele atualizando a minha lista com os dados assim se o camarada estiver usando uma 3G a aplicação não vai falhar(espero srsrs) Mas é isso cara problema resolvido com sucesso tenho aprendido bastante com seu blog vc é mestre no assunto e eu torço pra que seu blog ainda seja um dos mais visitados blogs d tecnologia pois merece, obrigado mais uma vez to sempre por aqui estalkeando rs Abraços fica na paz.