2012-07-31 8 views
5

Ho creato una finestra di dialogo personalizzata denominata MyCustomDialog che si estende Dialog. Creo e mostrare il mio dialogo personalizzato come segue:Come annullare o chiudere una finestra di dialogo personalizzata nel suo metodo onCreate?

new MyCustomDialog(myContext).show(); 

ho l'override del metodo Dialog.onCreate(Bundle savedInstanceState) a fare il mio inizializzazione. Verifico anche in questo metodo se una determinata condizione vale e, in caso contrario, vorrei chiudere/cancellare la mia finestra di dialogo. Ho provato a chiamare i metodi cancel() e dismiss() nei metodi onCreate(Bundle savedInstanceState) e onStart() della mia finestra di dialogo, ma non ha alcun effetto.

Qualcuno sa come annullare o chiudere una finestra di dialogo (all'interno della finestra di dialogo) prima che venga visualizzata?

+0

Stai chiamando super.onCreate() nel tuo metodo onCreate() ?? – RaphMclee

+0

Per quale livello di API stai scrivendo questo? –

risposta

2

è necessario posizionare la logica per determinare se la finestra di dialogo deve essere visualizzata al di fuori del metodo onCreate(). non appartiene a questo.

in alternativa, rinominare il metodo show()showIfRequired() (o qualcosa) e aggiungere la logica di visualizzazione condizionale lì.

so che questo tecnicamente non risponde alla tua domanda, ma quello che stai cercando di fare non è il design corretto. questa è una buona cosa, come fare nel modo giusto è in realtà più semplice.

Inoltre, come nota a margine, è necessario utilizzare DialogFragment in favore di Dialog. è disponibile nella libreria di supporto v4.

+0

Sì, e * potrebbe * sovrascrivere il metodo show() stesso nella sottoclasse della finestra di dialogo, chiamando super.show() in modo condizionale. – CSmith

+1

@CSmith sì, ma questo violerebbe il contratto per il metodo 'DialogInterface.show()'. –

1

Questo è per i livelli di API 10 e al di sotto:

primo luogo si dovrebbe ignorare onCreateDialog (int id, args Bundle) nella classe di attività, è che quello che stai facendo? Le finestre di dialogo vengono sempre create e visualizzate come parte dell'attività. In secondo luogo, non penso che tu possa annullare/chiudere una finestra di dialogo in onCreateDialog perché non è stata effettivamente creata quando viene chiamato onCreateDialog. Cioè, non puoi cancellare/cancellare qualcosa che non è stato creato. Quello che puoi provare è sovrascrivere onPrepareDialog() e fare il tuo controllo per annullare/chiudere la finestra di dialogo. A quel punto la finestra di dialogo dovrebbe effettivamente essere stata creata (solo non visualizzata), quindi si sarebbe in grado di impedirne la visualizzazione se si chiama Annulla/Cancella lì.

onPrepareDialog() è il posto giusto per eseguire qualsiasi tipo di controllo e processo decisionale nella finestra di dialogo che sta per essere visualizzata. Questo è per le API precedenti a Honeycomb.

Questo è per le API 11 e versioni successive:

Se si utilizza un API più tardi, si dovrebbe estendere DialogFragment invece. In questo caso penso che tu possa gestire il processo decisionale nel metodo onCreateView() di DialogFragment che è simile a onPrepareDialog().

spero che hai letto attraverso questo: http://developer.android.com/guide/topics/ui/dialogs.html

o del presente, a seconda del vostro API:

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

Nel complesso, forse una soluzione più pulita è quella di disabilitare il pulsante o meccanismo che causa la visualizzazione della finestra di dialogo in primo luogo? Cioè, scrivi il tuo codice in modo tale che Dialog.show() sia chiamato solo quando ha davvero bisogno di essere chiamato. Dovrei conoscere maggiori dettagli su cosa esattamente stai cercando di fare. Ad esempio, supponi di chiamare Dialog.show() da onClickListener di un pulsante. non vuoi veramente che l'utente prema un pulsante, aspetti una finestra di dialogo, ma non farlo apparire per qualche motivo che l'utente non capisce. Una soluzione migliore sarebbe disabilitare il pulsante tutti insieme in modo che sia ovvio all'utente che questa funzione non è disponibile a causa di qualcos'altro nell'applicazione.

+0

'onCreateDialog()' è un metodo in 'DialogFragment'. non sta usando 'DialogFragment', sta estendendo' Dialog'. –

+0

Il onCreateDialog di cui sto parlando è in realtà un metodo di attività. Così è il onPrepareDialog() di cui sto parlando. Non sembra che l'OP stia usando DialogFragment. Se questa app è pre-nido d'ape, questo è ciò che l'OP dovrebbe fare (Dialogfragment non esiste prima di Honeycomb). se è per honeycomb e successivi, che l'OP dovrebbe usare DialogFragment. Ho aggiunto questo commento alla domanda originale. –

Problemi correlati