¿Cómo mostrar un cuadro de diálogo Sí/No en Android?

Resuelto Solo asked hace 54 años • 17 respuestas

Sí, sé que existe AlertDialog.Builder, pero me sorprende saber lo difícil (bueno, al menos no fácil de programar) mostrar un cuadro de diálogo en Android.

Solía ​​​​ser desarrollador de .NET y me pregunto si existe algún equivalente de Android de lo siguiente.

if (MessageBox.Show("Sure?", "", MessageBoxButtons.YesNo) == DialogResult.Yes){
    // Do something...
}
Solo avatar Jan 01 '70 08:01 Solo
Aceptado

AlertDialog.Builder realmente no es tan difícil de usar. Sin duda, es un poco intimidante al principio, pero una vez que lo has usado un poco, es simple y poderoso. Sé que has dicho que sabes cómo usarlo, pero de todos modos aquí tienes un ejemplo sencillo:

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which){
        case DialogInterface.BUTTON_POSITIVE:
            //Yes button clicked
            break;

        case DialogInterface.BUTTON_NEGATIVE:
            //No button clicked
            break;
        }
    }
};

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
    .setNegativeButton("No", dialogClickListener).show();

También puedes reutilizarlo DialogInterface.OnClickListenersi tienes otras casillas de sí/no que deberían hacer lo mismo.

Si está creando el cuadro de diálogo desde dentro de un archivo View.OnClickListener, puede usarlo view.getContext()para obtener el contexto. Alternativamente puedes usar yourFragmentName.getActivity().

Steve Haley avatar Mar 19 '2010 15:03 Steve Haley

Prueba esto:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("Confirm");
builder.setMessage("Are you sure?");

builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
        // Do nothing but close the dialog

        dialog.dismiss();
    }
});

builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {

        // Do nothing
        dialog.dismiss();
    }
});

AlertDialog alert = builder.create();
alert.show();
nikki avatar Aug 31 '2012 10:08 nikki

La respuesta de Steve H es acertada, pero aquí hay un poco más de información: la razón por la que los diálogos funcionan como lo hacen es porque los diálogos en Android son asincrónicos (la ejecución no se detiene cuando se muestra el diálogo). Debido a esto, debe utilizar una devolución de llamada para manejar la selección del usuario.

Consulte esta pregunta para obtener una discusión más extensa entre las diferencias en Android y .NET (en lo que se refiere a los cuadros de diálogo): Diálogos/AlertDialogs: Cómo "bloquear la ejecución" mientras el diálogo está activo (estilo .NET)

Erich Douglass avatar Mar 19 '2010 17:03 Erich Douglass

Esto es trabajo para mí:

AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

    builder.setTitle("Confirm");
    builder.setMessage("Are you sure?");

    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {

            // Do nothing, but close the dialog
            dialog.dismiss();
        }
    });

    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            // Do nothing
            dialog.dismiss();
        }
    });

    AlertDialog alert = builder.create();
    alert.show();
hash avatar Dec 24 '2014 07:12 hash

Preguntarle a una Persona si quiere llamar o no al Diálogo.

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.Toast;

public class Firstclass extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.first);

        ImageView imageViewCall = (ImageView) findViewById(R.id.ring_mig);

        imageViewCall.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v){
                try{
                    showDialog("0728570527");
                } catch (Exception e){
                    e.printStackTrace();
                }                   
            }    
        });    
    }

    public void showDialog(final String phone) throws Exception {
        AlertDialog.Builder builder = new AlertDialog.Builder(Firstclass.this);

        builder.setMessage("Ring: " + phone);       

        builder.setPositiveButton("Ring", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which){

                Intent callIntent = new Intent(Intent.ACTION_DIAL);// (Intent.ACTION_CALL);                 
                callIntent.setData(Uri.parse("tel:" + phone));
                startActivity(callIntent);

                dialog.dismiss();
            }
        });

        builder.setNegativeButton("Abort", new DialogInterface.OnClickListener(){   
            @Override
            public void onClick(DialogInterface dialog, int which){
                dialog.dismiss();
            }
        });         
        builder.show();
    }    
}
Zar E Ahmer avatar Apr 22 '2014 06:04 Zar E Ahmer