Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Criar um ListView de EditText

Olá Pessoal, eu preciso criar uma ListView customizada, que carrega um adapter com 1 TextView e 1 EditText, e exibi-la ao usuário. (Até aí tudo bem, consegui) o que estou com dificuldade é que o edittext não esta deixando inserir dados nele, e também não sei como recuperar os dados que foram inseridos nele. Alguém pode me dar um exemplo de como salvar dados de um listview de EditTexts ?

segue o codigo XML que o adapter infla: <?xml version="1.0" encoding="utf-8"?>

4 respostas

Codigo do Adapter:


public class CaracteristicasAdapter extends BaseAdapter {

    private Context context;
    private List<Caracteristicas> lista;


    public CaracteristicasAdapter(Context c, List<Caracteristicas> l) {

        this.context = c;
        this.lista = l;

    }


    @Override
    public int getCount() {
        return lista.size();
    }

    @Override
    public Object getItem(int position) {
        return lista.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

             Caracteristicas caracteristicas = lista.get(position);

        if (convertView == null){

            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.analises,null);

        }
              TextView txtAnalise = (TextView) convertView.findViewById(R.id.txtAnalise);
              final EditText edAnalise = (EditText) convertView.findViewById(R.id.edAnalise);

        //necessário para recuperar os valores em ListaordensPorLinha
        txtAnalise.setText(caracteristicas.getDesc_caracteristica());

        return convertView;
    }

}

Edson,

Você consegue passar informações para dentro do EditText da mesma forma que faz para o TextView, atráves do método setText .

Para pegar as informações que estão em um EditText você terá que chamar o método getText() que te devolverá um Editable, com essa referência a gente não consegue fazer muita coisa, então vamos passar ela para String utilizando o método toString. Seu código ficará assim :

String edAnaliseTexto = edAnalise.getText().toString();

Espero ter ajudado !

Abraço

Olá Matheus,

Entendi o que você falou, mas não estou conseguindo nem digitar ainda.... Quando eu gero o ListView aparecem 12 edittext, quando eu clico em 1 ele abre o teclado mas quando eu vou clicar ele sai do editText que selecionei e não deixa eu digitar mais. Acontece outra coisa estranha, como ele não deixa eu digitar, tentei copiar e colar um texto qualquer, ele aceita, mas quando eu rolo a pagina para baixo ou para cima, o texto que digitei na primeira linha do ListView vai para a terceira e se eu ficar rolando a pagina para baixo e para cima ele fica pulando de linha aleatoriamente.

solução!

Olá Pessoal,

Consegui resolver o problema usando a Classe ViewHolder, vou colocar aqui o codigo da minha Adapter já com a implementação do ViewHolder:

package com.brasalrefrigerantes.egomes.qmobile11.Adapter;

import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.SurfaceHolder; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.TextView;

import com.brasalrefrigerantes.egomes.qmobile11.Banco.Model.Caracteristicas; import com.brasalrefrigerantes.egomes.qmobile11.R;

import java.util.List;

/* Created by EGomes on 30/01/2016. */ public class CaracteristicasAdapter extends BaseAdapter {

private Context context; private List lista;

public CaracteristicasAdapter(Context c, List l) {

this.context = c; this.lista = l;

}

@Override public int getCount() { return lista.size(); }

@Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); }

@Override public Object getItem(int position) { return lista.get(position); }

@Override public long getItemId(int position) { return position; }

@Override public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder; Caracteristicas caracteristicas = lista.get(position);

if (convertView == null){

holder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.analises,null); holder.edAnalise = (EditText) convertView.findViewById(R.id.edAnalise); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); }

TextView txtAnalise = (TextView) convertView.findViewById(R.id.txtAnalise);

//preenchendo com valores da lista holder.edAnalise.setText(lista.get(position).getFac()); holder.edAnalise.setId(position);

//depois de editar precisamos atualizar o adapter holder.edAnalise.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(!hasFocus){ final int position = v.getId(); // final EditText edAnalise = (EditText) convertView.findViewById(R.id.edAnalise); final EditText edAnalise = (EditText) v; lista.get(position).setFac( edAnalise.getText().toString());

} } });

//necessário para recuperar os valores em ListaordensPorLinha txtAnalise.setText(caracteristicas.getDesc_caracteristica());

return convertView; }

class ViewHolder{ EditText edAnalise; } class ListItem{ String edAnalise; }

}