Autore Topic: Il dialog non blocca l'esecuzione della mia activity  (Letto 1045 volte)

Offline ticemamarz

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Il dialog non blocca l'esecuzione della mia activity
« il: 13 Aprile 2012, 16:37:44 CEST »
0
Ciao Ragazzi,
vi posto il mio codice e vi spiego quello che non va.

Codice: [Seleziona]
package android.Dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class DialogAlertActivity extends Activity {
    /** Called when the activity is first created. */
   
        static final int CONFIRM_DIALOG = 0;
    Button button;
    AlertDialog alertDialog;
    boolean flag;
   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Creiamo un semplice bottone che faccia visualizzare la finestra di dialogo
        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                showDialog(CONFIRM_DIALOG);
                if (flag)
                        System.out.println("DOPO Aver premuto un pulsante del DIALOG");
                else
                        System.out.println("PRIMA Aver premuto un pulsante del DIALOG");
            }
        });
    }
    protected Dialog onCreateDialog(int id) {
        Dialog dialog;
        switch(id) {
        case CONFIRM_DIALOG:
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setMessage("Chiudere l'applicazione?");
                builder.setCancelable(false);
                builder.setPositiveButton("Si", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                                flag = true;
                                DialogAlertActivity.this.finish(); // Chiudiamo l'applicazione
                                        }
                        });
                builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                        flag = true;
                            dialog.dismiss(); // Chiudiamo la finestra di dialogo
                            }
                });
                builder.setNeutralButton("Annulla", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                        flag = true;
                              dialog.dismiss(); // Chiudiamo la finestra di dialogo
                              }
                });
                dialog = builder.create();
            break;
        default:
            dialog = null;
        }
        return dialog;
    }
}

Come potete vedere nel medoto onCreate viene impostata l'azione del pulsante.
Il pulsante ha il compito di far apparire una Dialog e verificare il valore di un flag. Questo flag mi indica se la verifica della variabile "flag" è stata fatta prima o dopo aver premuto un pulsante del Dialog.
Su diversi tutorial che ho letto dicono che la Dialog blocca l'activity sottostante per interagire appunto con la Dialog ma se questo è vero come mai la verifica della variabile "flag" viene fatta prima che sullo schermo appaia la Diaolog? Non si dovrebbe bloccare l'esecuzione del codice sull'istruzione "showDialog(CONFIRM_DIALOG);" e poi una volta premuto un pulsante fare la verifica della variabile "flag"?
Qualcuno mi può spiegare bene.  ;-)

PS: il codice è stato modificato prendendo come esempio quello di un tutorial di questo sito. :-)
« Ultima modifica: 13 Aprile 2012, 16:41:38 CEST da ticemamarz »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Il dialog non blocca l'esecuzione della mia activity
« Risposta #1 il: 14 Aprile 2012, 01:26:54 CEST »
0
Non si dovrebbe bloccare l'esecuzione del codice sull'istruzione "showDialog(CONFIRM_DIALOG);" e poi una volta premuto un pulsante fare la verifica della variabile "flag"?

Ciao,
no la showDialog non è bloccante.
Puoi però "simulare" questa cosa andando a mettere il codice che vuoi eseguire dopo la chiusura del dialog dopo che fai il dimiss() o insercettando la chiusura con un DialogInterface.OnCancelListener