¿Por qué setCanceledOnTouchOutside (false) no funciona en Alert Builder?
Tengo un diálogo de alerta en mi actividad y no quiero que el usuario pueda descartarlo haciendo clic fuera del diálogo. Basado en mi investigación ( como esto ) encontré setCanceledOnTouchOutside(false);
método. Sin embargo, no pude usarlo en mi aplicación y es posible descartar el diálogo mientras tengo este método.
Este es mi código
- Crear cuadro de diálogo con barra de progreso en android
- Totalmente transparente ActionBarSherlock utilizando el tema
- ¿Cómo crear un diálogo que se parece exactamente a ContextMenu?
- Uso del diálogo de progreso con el hilo
- No se puede agregar ventana - token android.os.BinderProxy@42824 no es válido; ¿Está funcionando su actividad?
private AlertDialog alertDialog; alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.setTitle(""); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (intAlertAction) { case 1: case 2: case 3: default: } } });
Cualquier sugerencia sería apreciada.
- Android: ¿Cómo crear un cuadro de diálogo sin título?
- Android - MediaController de VideoView dentro de diálogo aparece detrás del diálogo
- GetContentResolver () y getWindow () en un DialogFragment
- Cómo iniciar una actividad desde un diálogo en Android
- ¿Es posible que cuando haga clic edittext mostrará mensaje de diálogo?
- Objetos EditText múltiples en AlertDialog
- Android - Cambiar el fondo del título del diálogo personalizado
- Callback de DialogFragment en el cambio de orientación
Esta es una pregunta interesante y creo que sé su respuesta.
He estado probando una aplicación en diferentes plataformas y me di cuenta de una pequeña diferencia entre ellos. Por encima de android 4.0 cuando tocas un mensaje Toast, simplemente desaparece. Quess es lo mismo con diálogos (y AlertDialogs). Simplemente "desaparece" al tocar (pero no es descartado – simplemente no se puede ver).
Espero que ayudó!
setCanceledOnTouchOutside
sólo impide descartar haciendo clic fuera del cuadro de diálogo. Pero todavía puede descartarlo con botón de retroceso, por ejemplo.
Si no desea que su diálogo sea cancelable en todo use dialog.setCancelable(false)
Acabo de probar su código (fijo) y funciona como se esperaba: el usuario no puede descartar el diálogo al hacer clic fuera de él. Intentalo:
AlertDialog alertDialog; alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.setTitle(""); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); alertDialog.show();
AlertDialog alertDialog; alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.setCancelable(false); alertDialog.setTitle(""); alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); alertDialog.show();
sólo
dialog.setCancelable(false);
¡¡El problema está resuelto!!