How do I maintain the position of a ListView when an item is changed?

1

How do I maintain the position of my ListView , which contains EditText , when the value of this EditText changes?

Calling the class that searches the database:

        /* Instancia da classe repositorioProdutos*/
        repositorioProdutos = new RepositorioProdutos(conn,this);
        repositorioPedidosProdutos = new RepositorioPedidosProdutos(conn);

        adpProdutos = repositorioProdutos.buscaProdutos(this);

        lstProdutos.setAdapter(adpProdutos);
        lstProdutos.setItemsCanFocus(true);

Method of the repository classProducts that instantiate the ProductsArrayAdapter class and preehche my AA:

    public ArrayAdapter<Produtos> buscaProdutos(Context context)
{
    ProdutosArrayAdapter adpProdutos = new ProdutosArrayAdapter(context, R.layout.item_produto);

    Cursor cursor = conn.query("PRODUTOS", null, null, null, null, null, null);

    if (cursor.getCount() > 0)
    {
        cursor.moveToFirst();
        do
        {
            Produtos produtos = new Produtos();
            produtos.setCodigo(cursor.getInt(cursor.getColumnIndex("COD_PRODUTO")));
            produtos.setNome(cursor.getString(cursor.getColumnIndex("NOME")));
            produtos.setDesc(cursor.getString(cursor.getColumnIndex("DESCR")));
            produtos.setGrupo(cursor.getString(cursor.getColumnIndex("GRUPO")));
            produtos.setSubgrupo(cursor.getString(cursor.getColumnIndex("SUBGRUPO")));
            produtos.setMedida(cursor.getString(cursor.getColumnIndex("MEDIDA")));
       //     produtos.setQuantidade(cursor.getColumnIndex("QUANTIDADE"));

            adpProdutos.add(produtos);
            adpProdutos.notifyDataSetChanged();

        }while (cursor.moveToNext());
    }
    adpProdutos.notifyDataSetChanged();
    return adpProdutos;
}

Class ProductsArrayAdapter:

    public class ProdutosArrayAdapter extends ArrayAdapter<Produtos> {

private int resource = 0;
private LayoutInflater inflater;
private Context context;

public ProdutosArrayAdapter(Context context, int resource ) {
    super(context, resource);
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.resource = resource;
    this.context= context;
}

public View getView(final int position, View convertView, ViewGroup parent)
{
    View view = null;
    ViewHolder viewHolder = null;

    if (convertView == null)
    {
        viewHolder = new ViewHolder();
        view = inflater.inflate(resource, parent, false);
        viewHolder.txtProduto = (TextView)view.findViewById(R.id.txtProduto);
        viewHolder.txtGrupo = (TextView)view.findViewById(R.id.txtGrupo);
        viewHolder.txtMedida = (TextView)view.findViewById(R.id.txtMedida);
        viewHolder.txtDescr = (TextView)view.findViewById(R.id.txtDescr);
        viewHolder.edtQtde = (EditText)view.findViewById(R.id.edtQtde);

        view.setTag(viewHolder);

        convertView = view;
    }
    else
    {
        viewHolder = (ViewHolder)convertView.getTag();
        view = convertView;
    }

    final Produtos produtos = getItem(position);

    viewHolder.txtProduto.setText(produtos.getNome());
    viewHolder.txtGrupo.setText(produtos.getGrupo());
    viewHolder.txtDescr.setText(produtos.getDesc());
    viewHolder.txtMedida.setText(produtos.getMedida());
    viewHolder.edtQtde.setText(Integer.toString(produtos.getQuantidade()));

    /* Quando alterado o valor do EditText, ele altera o metodo do objeto Produtos*/ 
    viewHolder.edtQtde.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                EditText et = (EditText) v.findViewById(R.id.edtQtde);
                //  Toast.makeText(context, "Acho o item" + et.getText(), Toast.LENGTH_SHORT).show();

                try {
                    if (!et.getText().toString().trim().equals("")) {
                        produtos.setQuantidade(Integer.parseInt(String.valueOf(et.getText())));
                    }
                } catch (Exception ex) {
                    Toast.makeText(context, "Erro" + ex.getMessage(), Toast.LENGTH_SHORT).show();

                }
            }
        }
    });

    return view;
}
static class ViewHolder
{
    TextView txtCodigo;
    TextView txtProduto;
    TextView txtGrupo;
    TextView txtMedida;
    TextView txtDescr;
    EditText edtQtde;
}
}

Xml item_product.xml to mount the arrayAdapter:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="260dp"
    android:layout_height="wrap_content"
    android:clickable="false"
    android:baselineAligned="false">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/lbl_produto"
        android:id="@+id/txtProduto"
        android:layout_weight="1"
        android:textStyle="bold" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="@string/lbl_descr"
        android:id="@+id/txtDescr"
        android:layout_weight="1"
        android:textStyle="italic" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="1"
        android:layout_weight="1">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="@string/lbl_grupo"
            android:id="@+id/txtGrupo"
            android:layout_weight="0.94"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="@string/lbl_medida"
            android:id="@+id/txtMedida"
            android:textStyle="bold" />

    </LinearLayout>

</LinearLayout>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="@string/lbl_qtde"
        android:id="@+id/txtQtde"
        android:layout_weight="1"
        android:gravity="center_horizontal" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/edtQtde"
        android:layout_weight="1"
        android:gravity="center_horizontal" />
</LinearLayout>

Activity Xml that has the ListView:     

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:weightSum="1">

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton"
        android:src="@android:drawable/ic_menu_search"
        android:background="@android:color/transparent"
        android:layout_gravity="center" />

    <EditText
        android:layout_width="224dp"
        android:layout_height="wrap_content"
        android:id="@+id/edtProcuraProd"
        android:hint="Buscar produtos"
        android:layout_weight="0.94" />

</LinearLayout>

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/lstProdutos"
    android:layout_gravity="center_vertical"
    android:layout_margin="@dimen/abc_action_bar_content_inset_material" />

</LinearLayout>
    
asked by anonymous 04.03.2016 / 18:45

0 answers