¿Cómo mostrar un cuadro de diálogo Sí/No en Android?
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...
}
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.OnClickListener
si 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()
.
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();
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)
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();
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();
}
}