Autore Topic: Come chiamare un metodo o meno in risposta ad un AlertDialog  (Letto 838 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Come chiamare un metodo o meno in risposta ad un AlertDialog
« il: 22 Febbraio 2011, 22:49:55 CET »
0
Ho un alertDialog con i bottoni ok e cancel
A seconda della scelta dell'utente devo chiamare un metodo piuttosto che un altro
Questi metodi non sono richiamabili all'interno de listener associati al bottone ok e cancel
avrei bisogno che l'AlertDialog mi ritornasse un boolean che rappresenta ok o cancel ed in base a quel valore eseguo il mio codice
come posso fare?
questo è il mio codice non funzionante:


Codice (Java): [Seleziona]
@Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {

                boolean exitFromApp = false;
               
                Context context = getApplicationContext();
                Stato stato = (Stato) context;
                if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
                        exitFromApp = showAlertDialogToExit();
                        Log.d(this.toString(), "exitFromApp: " + exitFromApp);
                }
                if (exitFromApp)
                        exitFromApp = super.onKeyDown(keyCode, event);
                return exitFromApp;

        }

        public boolean showAlertDialogToExit() {
                final boolean exit = false;
                final AlertDialog alertDialog = new AlertDialog.Builder(Quizzi.this)
                                .create();
                alertDialog.setTitle("Demo");
                alertDialog.setMessage("Sei sicuro di voler uscire dal gioco?");
                alertDialog.setIcon(R.drawable.icon);

                alertDialog.setButton("OK", new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int which) {

                                exit = true; <- non compila perchè exit è di tipo final
                                alertDialog.dismiss();
                        }
                });

                alertDialog.setButton2("Annulla",
                                new DialogInterface.OnClickListener() {

                                        public void onClick(DialogInterface dialog, int which) {
                                                // Log.d("", "Hai premuto NO");
                                                exit = false;
                                                alertDialog.dismiss();
                                        }
                                });
                alertDialog.show();
                Log.d(this.toString(), "exit: " + exit);
                return exit;
        }

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 773
  • Respect: +161
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Come chiamare un metodo o meno in risposta ad un AlertDialog
« Risposta #1 il: 10 Marzo 2011, 17:58:28 CET »
+2
Attenzione: al di là dell'errore (perché hai usato final?) il concetto è sbagliato.
La chiamata alertDialog.show(); non blocca l'esecuzione del codice. Le finestre di dialogo in Android sono modali ma NON bloccanti, ergo showAlertDialogToExit() restituirebbe sempre false..

In questo articolo si parla di un problema simile e viene spiegato perché i le finestre di dialogo non sono bloccanti.

Viene comunque proposta un'alternativa che permette di ottenere gli stessi risultati di una finestra di dialogo modale e bloccante: creare un'Activity con lo stesso aspetto di un Dialog.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.