How to obtain Arraylist from Listview?

Asked

Viewed 238 times

2

I have a screen in my application with several fields, spinners and a listview, one of the spinner is products. When I select a product in the spinner and click on a button called add, the application populates this listview with the product id, name, quantity and price.

So far everything is working perfectly, but when I click on the Finish sale button, I have to make the Inserts with customer name, products etc... etc..., I am not able to do this.

I’ve done it many ways but none of it worked.
To put the products in listview I am doing as follows:

In the Pedidoprodutoactivit class I retrieve the spinner access the id of the selected item within the spinner then 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 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 created an Adapter class to access 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 on Pedidoprodutoactivity so that the products were placed on 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 unable to recover the information entered from listview to make the required Inserts.

I tried to access in various ways with Sqlcursor, Cursor etc...

the most worked 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, someone has some hint that can help me?

1 answer

1


In the Productosadapter create a method that returns the list of products:

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

In the onClick() 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 Product class should be called Product

  • 1

    It worked, ours was pretty simple, but it’s hard to be learning and not find any material about something, thank you very much

Browser other questions tagged

You are not signed in. Login or sign up in order to post.