How to get the ListView ArrayList?

2

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?

    
asked by anonymous 12.05.2016 / 14:27

1 answer

1

In ProductsAdapter create a method that returns the product list:

public ArrayList<Produtos> getProdutos(){
    return produtos;
}

On% button% use it as follows:

Button confirma = (Button) findViewById(R.id.btnConfirmar);
confirma.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        //Se tiver aqui acesso ao produtosAdapter, estas duas linhas não são necessárias
        ListView lstprod = (ListView) findViewById(R.id.lsProdutos);
        ProdutosAdapter produtosAdapter = lstprod.getAdapter();

        final BancoController crud = new BancoController(getBaseContext());
        crud.op = 2;

        ArrayList<Produtos> produtos = produtosAdapter.getProdutos();
        int linhas = produtos.size();
        for (int i = 0; i < linhas; i++ ){

            Produtos linha = produtos.get(i);
            String id = linha.getId();
            String descricao = linha.getDescricao();
            String qtd = linha.getQuantidade();
            String preco = linha.getPreco();
        }
    }
});

Note: Your Products class should be called Product

    
12.05.2016 / 15:31