2013-05-07 12 views
7

Io uso showDialog e dismissDialog in attività per visualizzare e distruggere la mia finestra di dialogo. C'è anche un modo per emettere un comando clic sulla finestra di dialogo attualmente visualizzata senza mantenere una variabile che faccia riferimento alla finestra di dialogo?Come fare clic su 'OK' su un AlertDialog tramite codice?

Ad esempio, desidero premere il pulsante "Ok"/positivo della finestra di dialogo tramite codice.

+0

Stai utilizzando un builder per configurare la finestra di dialogo? – TronicZomB

+0

@TronicZomB: Sì, sto usando 'Builder' e sto sovrascrivendo' onCreateDialog' in 'Activity' per configurare la mia finestra di dialogo. – Arci

+1

Ok, bakriOnFire ha un bell'esempio di quello che stavo per pubblicare subito prima che notassi la sua risposta. Questo è praticamente ciò che vorresti modellare come il tuo codice. – TronicZomB

risposta

25

non ho ancora testato questo codice ma dovrebbe funzionare:

AlertDialog dialog = ... 
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); 

In alternativa, se non si desidera mantenere un riferimento al dialogo, ma è in controllo della sua configurazione, è possibile estrarre il codice clic in un altro metodo:

AlertDialog.Builder builder = ... 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    onPositiveButtonClicked(); 
    } 
}); 

e implementare onPositiveButtonClicked() nella tua attività. Invece di fare clic programmaticamente sul pulsante OK, è possibile chiamare onPositiveButtonClicked() e dismissDialog(id). Se è necessario gestire più finestre di dialogo, è necessario impostare onPositiveButtonClicked un parametro id.

+0

Grazie, ma sto usando Builder e non ha un metodo 'getButton'. C'è un modo per fare clic sul pulsante 'OK' senza mantenere un riferimento alla finestra di dialogo attuale? – Arci

+2

Se è possibile mantenere un riferimento alla finestra di dialogo, l'istanza AlertDialog viene restituita da AlertDialog.Builder # show(). Altrimenti, è possibile spostare la logica del clic su un metodo separato? Invece di simulare un clic, puoi semplicemente eseguire il codice su clic e chiudere la finestra di dialogo. –

+0

Sì, restituisce un 'AlertDialog' ma non mi piace mantenere una variabile che fa riferimento a' AlertDialog'. C'è un modo per accedere alla finestra di dialogo usando l'attività, dato che ho l'ID della finestra di dialogo? – Arci

-1

Prova questo: -

AlertDialog.Builder alBuilder = new AlertDialog.Builder(this); 
     alBuilder 
       .setMessage("Do you wamt to exit?") 
       .setPositiveButton("Yes", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for Yes 
          } 
         }) 
       .setNegativeButton("No", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for No 
          } 
         }); 
     alBuilder.setCancelable(false); 
     alBuilder.show(); 
+0

Grazie! Ma penso che tu abbia frainteso la mia domanda. – Arci

+0

puoi inserire il tuo codice in modo che possiamo capire quello che vuoi .. – bakriOnFire

+0

Sto cercando qualcosa come: activity.getActiveDialog (DIALOG_ID) .getButton (...). PerformClick() '. Proprio come 'activity.dismissDialog (DIALOG_ID)' in cui puoi chiudere la finestra di dialogo semplicemente usando DIALOG_ID. – Arci

4

voglio premere il pulsante positiva 'Ok'/della finestra di dialogo tramite codice

Sì, è possibile farlo ottenendo istanza di POSITIVE Button e quindi chiamare performClick() su di esso. provalo come:

Button okButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 
okButton.performClick(); //<<< click Button using code 
+0

Grazie! Ma cosa succede se non ho riferimento alla variabile ''? C'è un modo per accedere al pulsante 'POSITIVO' usando solo' Activity' (simile a 'dismissDialog')? – Arci

Problemi correlati