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.
fonte
2012-07-31 16:26:04
Stai chiamando super.onCreate() nel tuo metodo onCreate() ?? – RaphMclee
Per quale livello di API stai scrivendo questo? –