Problems with Alert Dialog

1

I'm having a problem picking up a text entry in a dialog box in AndroidStudio. I want to receive the quantity of a product and add it to a ArrayList , however the function does not wait for the insert in the EditText that I added inside the dialog box and assigns the value 0 to my return variable.

Here is the code where I invoke the method:

/*Método que captura o click do garçon em determinado produto e depois pega a quantidade */
public AdapterView.OnItemClickListener Dialogo(){
    return(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            switch (position){
                case 0:
                    Produtos cafe = new Produtos();
                    cafe.setId(0);
                    cafe.setQuantidade(Caixa_Dialogo("Café"));
                    cafe.setTempo_preparo(2);
                    pro_pedidos.add(cafe);
                    break;

                case 1:
                    Produtos suco = new Produtos();
                    suco.setId(1);
                    suco.setQuantidade( Caixa_Dialogo("Suco"));
                    suco.setTempo_preparo(10);
                    pro_pedidos.add(suco);
                    break;

                case 2:
                    Produtos refrigerante = new Produtos();
                    refrigerante.setId(2);
                    refrigerante.setQuantidade( Caixa_Dialogo("Refrigerante"));
                    refrigerante.setTempo_preparo(10);
                    pro_pedidos.add(refrigerante);
                    break;
            }//switch

        }//onItemClick.
    });//return


}//Dialogo

This is the method that creates the box:

/*Método que retorna uma quantidade digitada pelo garçon em uma caixa de diálogo*/
public int Caixa_Dialogo(String item){

    AlertDialog.Builder caixa = new AlertDialog.Builder(Main2Activity.this);
    caixa.setTitle("Seleção de quantidade");
    caixa.setMessage(item+" selecionado. Digite a quantidade que o cliente deseja:");

    /*Construção do TextEdit.*/
    final EditText entrada = new EditText(Main2Activity.this);
    entrada.setInputType(InputType.TYPE_CLASS_NUMBER);
    caixa.setView(entrada);

    caixa.show();

    caixa.setNeutralButton("Confirmar", new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int which){

            quantidade = Integer.parseInt(entrada.getText().toString());

        }
    });//setNeutralButton

    caixa.show();



    return quantidade;
}
    
asked by anonymous 13.06.2017 / 16:43

1 answer

1

Capture the information after the click action on the Dialog button, also make sure that the user tries to confirm the action with the empty field, otherwise it will throw an exception when trying to convert to int. Because it is not possible to return a value from the implementation of an event, create a method that will execute an algorithm that does what you want. Below is a template with what I said:

public void Caixa_Dialogo(String item){

AlertDialog.Builder caixa = new AlertDialog.Builder(Main2Activity.this);
caixa.setTitle("Seleção de quantidade");
caixa.setMessage(item+" selecionado. Digite a quantidade que o cliente deseja:");

/*Construção do TextEdit.*/

final EditText entrada = new EditText(Main2Activity.this);
entrada.setInputType(InputType.TYPE_CLASS_NUMBER);
caixa.setView(entrada);

caixa.show();

caixa.setNeutralButton("Confirmar", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        if (!entrada.getText().toString().isEmpty()){
            quantidade= Integer.parseInt(entrada.getText().toString());
            faca(quantidade);
        }
    }
});//setNeutralButton

caixa.show();

}

    
14.06.2017 / 17:01