Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Duvida Edit em ListView


viewHolder.edtCampeao.setText(listaAcessorios.get(i).getNome()); --- > viewHolder.edtCampeao.setText(listaCampeao.get(i).getNome());

Em quinta-feira, 27 de junho de 2013 21h17min10s UTC-3, Danilo Cosin escreveu:

Bom, vamos lá então ...
Depois de muito apanhar com esse lance de querer colocar um edittext dentro de um listview, crie algumas lógicas aqui que deram certo. 
Vou tentar explicar em poucas palavras, e com um trecho do código.

Este problema de sumir o conteúdo após o teclado baixar é devido ao refresh que existe na tela. Toda vez que a lista é 'reeinvocada novamente', os valores de cada um dos 'edits' tem que estar em algum lugar (Banco preferencialmente "eu prefiro", ou em um array tipado, ou algo do tipo).

*** Crio um objeto, no escopo principal da classe, criei este objeto caso queira manipular algum item dentro de um evento.
private ViewHolder[] array = null;

*** no construtor da classe, eu seto o tamanho do array, dentro dele terá os conteúdos de cada linha.
array = new ViewHolder[objects.size()];
for (int i = 0; i < objects.size(); i++) {

array[i] = null;

}

*** Crio uma classe para que os valores de cada item seja unico e com sua devida referencia.

static class ViewHolder {
protected EditText edtCampeao;
}

*** dentro do getview
public View getView(final int position, View convertView, ViewGroup parent) {

View row = convertView;
ViewHolder viewHolder = new ViewHolder();
    
                // Aqui que mora um dos segredos, criando e quando já criado ele apenas pega a tag do componente.
                if (row == null) {

LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

row = inflater.inflate(R.layout.views_lst_detalhe_acessorios, parent, false);
viewHolder.edtCampeao =(EditText) row.findViewById(R.id.edtCampeao);;

row.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) row.getTag();
}

** dentro do getview ainda, o evento para gravar no banco.

viewHolder.edtCampeao.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){

int position_ = v.getId();
EditText Caption = (EditText) v;

String texto = Caption.getText().toString();

                                        // aqui ei gravo o item no banco, para depois pegá-lo e mostrar na lista.
}
}
});

ao final de todos os eventos do getview, eu dou um select no banco e realizo um for para preencher cada item na lista, com isso os valores não serão perdidos na tela. 
A performance fica normal, bem rápida.

                // select na tabela, e em seguida popular o objeto listaCampeao
// *** Obtendo valores para preencher componentes na lista ...
for (int i = 0; i < listaCampeao.size(); i++) {
                        
                         // esse objeto lista é o que foi passado no método construtor, o responsável por popular meu listview, 
if(lista.get(position).getCampeaoId() == Integer.parseInt(listaCampeao.get(i).getCampeaoId()))
viewHolder.edtCampeao.setText(listaAcessorios.get(i).getNome());
                        else 
                                viewHolder.edtCampeao.setText("");
}
// gravando o item no array criado no construtor.
array[position] = viewHolder;

return row;
}

É isso ae, espero ter ajudado.
Abraço, e SUCESSO !


Em quinta-feira, 27 de junho de 2013 15h15min50s UTC-3, Mstrey escreveu:
posta a solução para que as pessoas que procurarem no futuro saibam como resolver.


Maicon Strey
Novo Hamburgo - RS - Brasil
------------------
------------------
Linux user: #525086


On Thu, Jun 27, 2013 at 2:49 PM, Danilo Cosin <sou....@gmail.com> wrote:
Opa Jefferson, tudo bem ?
Entrei no forum ontem, dia 26/06/2013

Cara, vc ainda esta tendo este problema ?
Ja passei por isso e tenho uma solução que sana seu problema.

Em segunda-feira, 6 de agosto de 2012 14h33min23s UTC-3, JefersonCarlos_ escreveu:
?

--
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-...@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.
 
 

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

0 comentários:

Postar um comentário