I have a screen in my application with various fields, spinners and a listview, one of the spinner's is products. When I select a product in the spinner and click on a button called add, the application populates this listview with the id, name, quantity, and price of the product.
So far everything is working perfectly, but when I click the Finish Sale button, I have to do the inserts with the client's name, the products etc ... etc ..., I can not do this.
I did in many ways but none worked. To put the products in the listview I'm doing the following:
In the ProductProductActivit Class I retrieve the spinner access to the id of the selected item inside the spinner then I make a query in the product table using this id and assign the information in variables:
ListView lstpro = (ListView) findViewById(R.id.lsProdutos);
EditText eqtd = (EditText) findViewById(R.id.edtQuantidade);
Spinner spProd = (Spinner) findViewById(R.id.spProduto);
SQLiteCursor dados = (SQLiteCursor) spProd.getAdapter().getItem(spProd.getSelectedItemPosition());
final BancoController crud = new BancoController(getBaseContext());
final Cursor cursor = crud.carregaDadosByIdProd(dados.getInt(0));
quant = String.valueOf(eqtd.getText());
dpreco = dados.getDouble(2);
iqtd = Integer.parseInt(quant);
dtotal = dpreco * iqtd;
stotal = String.valueOf(dtotal);
novoId = cursor.getString(cursor.getColumnIndexOrThrow(CriaBanco.getProId()));
novaDescricao = cursor.getString(cursor.getColumnIndexOrThrow(CriaBanco.getProDescricao()));
novoPreco = stotal;
novaQtd = quant;
Then I created a Products class to store the value of these variables:
public class Produtos {
private int linha;
private String id;
private String descricao;
private String quantidade;
private String preco;
public Produtos(int linha){
this.linha = linha;
}
public Produtos(String id, String descricao, String quantidade, String preco){
this.id = id;
this.descricao = descricao;
this.quantidade = quantidade;
this.preco = preco;
}
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getPreco() {
return preco;
}
public void setPreco(String preco) {
this.preco = preco;
}
public String getQuantidade() {
return quantidade;
}
public void setQuantidade(String quantidade) {
this.quantidade = quantidade;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getLinha() {
return linha;
}
public void setLinha(int linha) {
this.linha = linha;
}
}
Then I created an adapter class to get access to the listview model:
public class ProdutosAdapter extends BaseAdapter {
private LayoutInflater prodInf;
private ArrayList<Produtos> produtos;
public ProdutosAdapter(Context context, ArrayList<Produtos> produtos){
this.produtos = produtos;
prodInf = LayoutInflater.from(context);
}
@Override
public int getCount() {
return produtos.size();
}
@Override
public Object getItem(int position) {
Produtos produto = produtos.get(position);
return produtos.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
Produtos produto = produtos.get(position);
view = prodInf.inflate(R.layout.pedido_produto_modelo, null);
((TextView)view.findViewById(R.id.txlpId)).setText(produto.getId());
((TextView)view.findViewById(R.id.txlpDescricao)).setText(produto.getDescricao());
((TextView)view.findViewById(R.id.txlpqtd)).setText(produto.getQuantidade());
((TextView)view.findViewById(R.id.txlpPreco)).setText(produto.getPreco());
return view;
}
}
and then did the rest in ProductProductActivity so that the products were placed in the listview
Produtos item = new Produtos(novoId, novaDescricao, novaQtd, novoPreco);
produtos.add(item);
produtosAdapter = new ProdutosAdapter(getBaseContext(), produtos);
lstpro.setAdapter(produtosAdapter);
This is working perfectly, the problem is that I am not able to retrieve the information from the listview to make the necessary inserts.
I tried accessing in various ways with SQLCursor, Cursor etc ...
What worked the most so far was as follows:
Button confirma = (Button) findViewById(R.id.btnConfirmar);
confirma.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ListView lstprod = (ListView) findViewById(R.id.lsProdutos);
final BancoController crud = new BancoController(getBaseContext());
crud.op = 2;
int linhas = lstprod.getCount();
for (int i = 0; i < linhas; i++ ){
Produtos linha = new Produtos(i);
String id = linha.getId();
String descricao = linha.getDescricao();
String qtd = linha.getQuantidade();
String preco = linha.getPreco();
}
}
});
The problem is that everything comes null when it runs, does anyone have any tips that can help me?