Problems with Alert Dialog

Asked

Viewed 116 times

1

I have a problem capturing a text input in a dialog box on Androidstudio. I want to receive the quantity of a product and add in a ArrayList, but the function does not wait for the insertion in EditText which I added inside the dialog box and set the value 0 to my return variable.

Here’s 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;
}
  • I believe the confusion here is the comparison of the swing dialog with the android dialog. It turns out that when calling a dialog, the method does not stop and awaits return. On Android you display the dialog and the execution of the method that called it proceeds normally. You will need to use events to capture value when dialog closes.

1 answer

1


Capture the information after the action of clicking on the Dialog button, also note the fact that the user tries to confirm the action with the empty field, otherwise it will trigger an exception when trying to convert to int. Since 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 follows a model 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();

}

Browser other questions tagged

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