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>