2012-07-31 22 views
5

He creado un cuadro de diálogo personalizado llamado MyCustomDialog que se extiende Dialog. Puedo crear y mostrar mi diálogo personalizado de la siguiente manera:Cómo cancelar o cerrar un cuadro de diálogo personalizado en su método onCreate?

new MyCustomDialog(myContext).show(); 

puedo reemplazar el método Dialog.onCreate(Bundle savedInstanceState) hacer mi inicialización. También compruebo en este método si una determinada condición se cumple y, de no ser así, me gustaría descartar/cancelar mi diálogo. Intenté llamar a los métodos cancel() y dismiss() en los métodos onCreate(Bundle savedInstanceState) y onStart() de mi cuadro de diálogo pero no tiene ningún efecto.

¿Alguien sabe cómo cancelar o cerrar un diálogo (desde dentro del cuadro de diálogo) antes de que se muestre?

+0

¿Está llamando a super.onCreate() en su método onCreate() ?? – RaphMclee

+0

¿Para qué nivel de API está escribiendo esto? –

Respuesta

2

debe colocar la lógica para determinar si el cuadro de diálogo debe mostrarse fuera del método onCreate(). no pertenece allí.

alternativamente, cambie el nombre de su show() método showIfRequired() (o algo así), y agregue allí la lógica de demostración condicional.

sé que esto técnicamente no responde a su pregunta, pero lo que está tratando de hacer no es el diseño correcto. eso es algo bueno, ya que hacerlo de la manera correcta es realmente más simple.

también, como una nota al margen, debe usar DialogFragment a favor de Dialog. está disponible en la biblioteca de soporte v4.

+0

Sí, y usted * podría * anular el método show() mismo en su subclase de diálogo, llamando a super.show() condicionalmente. – CSmith

+1

@CSmith sí, pero eso violaría el contrato del método 'DialogInterface.show()'. –

1

Esto es para niveles de API 10 y por debajo:

En primer lugar debe reemplazar onCreateDialog (int id, args Bundle) en la clase de actividad, es que lo que estás haciendo? Los diálogos siempre se crean y se muestran como parte de la Actividad. En segundo lugar, no creo que pueda cancelar/descartar un diálogo en CreateDialog porque no se ha creado realmente cuando se llama a onCreateDialog. Es decir, no puede cancelar/descartar algo que no se ha creado. Lo que puede intentar es anular OnPrepareDialog() en su lugar y hacer su verificación para cancelar/descartar el diálogo allí. En ese momento, el cuadro de diálogo debería haberse creado (simplemente no se muestra), por lo que podría evitar que se muestre si llama a cancelar/descartar allí.

onPrepareDialog() es el lugar adecuado para realizar cualquier tipo de comprobaciones y toma de decisiones en el cuadro de diálogo que se va a mostrar. Esto es para API antes de Honeycomb.

Esto es para las API 11 y posteriores:

Si está utilizando una API más tarde, usted debe extender DialogFragment lugar. En este caso, creo que puede manejar la toma de decisiones en el método onCreateView() de DialogFragment, que es similar a onPrepareDialog().

espero que haya leído esto: http://developer.android.com/guide/topics/ui/dialogs.html

o esto, dependiendo de su API:

http://developer.android.com/reference/android/app/DialogFragment.html

En general, tal vez una solución más limpia es desactivar el botón o mecanismo que hace que el diálogo aparezca en primer lugar? Es decir, escriba el código de modo que solo se llame a Dialog.show() cuando realmente necesita ser llamado. Tendría que saber más detalles sobre qué es exactamente lo que estás tratando de hacer. Por ejemplo, supongamos que llamas a Diálogo.show() desde onClickListener de un botón. no desea que el usuario presione un botón, espera un diálogo, pero no se muestra debido a alguna razón que el usuario no comprende. Una mejor solución sería desactivar el botón para que el usuario sepa que esta función no está disponible debido a otra cosa en la aplicación.

+0

'onCreateDialog()' es un método en 'DialogFragment'. él no está usando 'DialogFragment', él está extendiendo' Dialog'. –

+0

El onCreateDialog del que estoy hablando es un método de Actividad en realidad. Así es el onPrepareDialog() del que estoy hablando. No parece que el OP esté usando DialogFragment. Si esta aplicación es pre-nido de abeja, esto es lo que el OP debería estar haciendo (Dialogfragment no existe antes de Honeycomb). si es para nido de abeja y más tarde, entonces el OP debería estar usando DialogFragment. Agregué ese comentario a la pregunta original. –

Cuestiones relacionadas