EditText dentro de um ListView  XML
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Autor Mensagem
matheusms
Thread.start()

Membro desde: 19/01/2012 08:44:17
Mensagens: 30
Offline

Bom dia!

Estou carregando um EditText em uma ListView, até ai tudo bem.
Quando digito alguma coisa nesse EditText e rolo a ListView, o valor digitado no EditText vai para outra posição da ListView.

Alguém poderia me ajudar a resolver isso?

Desde já agradeço!
Abraço!
[MSN]
wagnerfrancisco
JavaGuru
[Avatar]

Membro desde: 02/10/2007 10:05:02
Mensagens: 243
Localização: Criciúma / SC
Offline

Poste seu código para podermos ajudar.

http://wagnermezaroba.blogspot.com
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Quando o getView é chamado, ele pode retornar para voce uma View no "convertView", essa é uma View que já está no Layout mas está fora da area de scrollagem, então o Adapter o reaproveita para exibir um novo item.

Voce tem que sempre limpar setar estado da View no getView.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
matheusms
Thread.start()

Membro desde: 19/01/2012 08:44:17
Mensagens: 30
Offline

Eis o código do meu Adapter:

[MSN]
matheusms
Thread.start()

Membro desde: 19/01/2012 08:44:17
Mensagens: 30
Offline

Marky,

Como assim, limpar setar estado da View no getView?
[MSN]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Voce tem que sempre limpar o estado da View e setar o novo pelo getView.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
matheusms
Thread.start()

Membro desde: 19/01/2012 08:44:17
Mensagens: 30
Offline

Pode me dar um exemplo?
[MSN]
wagnerfrancisco
JavaGuru
[Avatar]

Membro desde: 02/10/2007 10:05:02
Mensagens: 243
Localização: Criciúma / SC
Offline

O currentView reaproveita uma View previamente utilizada por questões de performance. Portanto se você tinha um determinado valor naquela View, ao rolar a lista a View será reaproveitada e caso você não a limpe os valores antigos estarão lá. No seu código você já faz:



Mas repare que em momento algum você limpa/reatribui algum valor ao seu EditText. Ficaria algo assim:




Para uma ListView de visualização apenas (sem edição) isso já seria suficiente. Entretanto, usando elementos editáveis, acho que você vai perder o que botou no EditText caso você role a lista e depois volte pra linha anterior. Pra resolver isso, uma sugestão, é adicionar um TextWatcher nos seus EditText. Toda vez que o valor do EditText é alterado você o armazena em algum lugar. Depois no getView basta usar este valor.


Falou.

http://wagnermezaroba.blogspot.com
matheusms
Thread.start()

Membro desde: 19/01/2012 08:44:17
Mensagens: 30
Offline

Esse TextWatcher eu tenho que colocar nesta classe aqui?

[MSN]
matheusms
Thread.start()

Membro desde: 19/01/2012 08:44:17
Mensagens: 30
Offline

?
[MSN]
wagnerfrancisco
JavaGuru
[Avatar]

Membro desde: 02/10/2007 10:05:02
Mensagens: 243
Localização: Criciúma / SC
Offline

Tem que adicionar o TextWatcher no teu EditText. Quando tu pega a referência dele, pode chamar o addTextChangedListener passando o TextWatcher. Algo assim:




Falou.

http://wagnermezaroba.blogspot.com
matheusms
Thread.start()

Membro desde: 19/01/2012 08:44:17
Mensagens: 30
Offline

Wagner,
adicionei um TextWatcher e preenchi o valor digitado em um ArrayList<String>, e depois eu tento fazer com que o EditText receba o valor do ArrayList na posição em que se encontra.
Ao fazer isso ele devia adicionar o valor na posição correta, mas ele adiciona em várias posições. Sabe o que pode ser?

Ex:
Digito o valor 2 no EditText da primeira posição da lista. Ele deveria adicionar esse valor na primeira posição da lista, mas ele adiciona em várias posições o valor 2.

Está assim meu código:



Desde já agradeço!
Abraço!
[MSN]
matheusms
Thread.start()

Membro desde: 19/01/2012 08:44:17
Mensagens: 30
Offline

Tentei de um jeito aqui e fico um pouco melhor, mais anda esta gravando na posição errada.
Se eu digita um valor na primeira linga do ListView ele grava na ultima posição que aparece, se eu for rolando a listview e digita um novo valor ele sempre grava na ultima posição da list view que aparece na tela.

Ficou assim meu código:

[MSN]
 
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Ir para:   
Powered by JForum 2.1.8 © JForum Team