2010-12-02 23 views
31

Sto sviluppando un quiz e ho bisogno che l'utente risponda a tutte le domande prima di procedere. Quando l'utente non ha risposto a tutte le domande, visualizzo un semplice messaggio di avviso che lo informa. Il problema è qualunque cosa faccia non riesco a chiudere il file di avviso. Perché non sta lavorando dialog.cancel `Questo è il codice:?Come chiudere un messaggio di avviso Android

AlertDialog.Builder ad = new AlertDialog.Builder(this); 
ad.setTitle("Unanswered Questions"); 
ad.setMessage("You have not answered all the questions."); 
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
    dialog.cancel(); 
} 
}); 
ad.show(); 
+1

Avvolgere il codice in tag di codice in modo che la domanda sia leggibile. – jacknad

+1

provato congedo()? – Vjy

+0

che dovrebbe funzionare. Posso suggerire di provare a eseguire il debug di ogni passaggio e vedere se viene chiamato ad.show(). Oh e anche il metodo onClick. – achie

risposta

24

provare a utilizzare

dialog.dismiss()

invece di utilizzare

dialog.cancel()

+1

Ciao Grazie per le risposte. Ho già provato dialog.dismiss(), e anche questo non funziona. Quindi suppongo che dovrò provare il suggerimento di Achie di eseguire il debug di ogni passaggio in quanto sembra che il mio codice sia corretto. – Engmex

+5

dismiss() non è disponibile per un AlertDialog, solo per le normali finestre di dialogo –

1

vorrei provare a mettere un

Log.e("SOMETAG", "dialog button was clicked"); 

prima della riga dialog.dismiss() nel codice per vedere se raggiunge effettivamente quella sezione.

8

mettere questa linea in OnCreate()

Context mcontext=this;  

e li usa questa variabile nel codice seguente

final AlertDialog.Builder alert = new AlertDialog.Builder(
           mcontext); 
         alert.setTitle(title); 
         alert.setMessage(description); 
         alert.setPositiveButton("Ok", 
           new DialogInterface.OnClickListener() { 

            @Override 
            public void onClick(DialogInterface dialog, 
              int which) { 
             dialog.cancel(); 
            } 
           }); 
         alert.show(); 

Prova questo codice .. E 'in esecuzione con successo ..

7

Usa setNegative pulsante, nessun pulsante Positivo richiesto! Prometto vincerai x

+1

Perché il downvote? –

0
final AlertDialog.Builder alert = new AlertDialog.Builder(mcontext); 
alert.setTitle(title); 
alert.setMessage(description); 
alert.setPositiveButton("Ok", 
new DialogInterface.OnClickListener() { 
    @Override         
    public void onClick(DialogInterface dialog,int which) { 
     cancelDialog(); //Implement method for canceling dialog 
     } 
    }); 
alert.show(); 
void cancelDialog() 
{ 
    //Now you can either use 
    dialog.cancel(); 
    //or dialog.dismiss(); 
} 
68

Il AlertDialog.Builder in sé non contiene un metodo dismiss() o cancel().

È una classe di convenienza che consente di creare una finestra di dialogo , che DEVE accedere a tali metodi.

Ecco un esempio:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

AlertDialog alert = builder.create(); 

alert.show(); 

quindi è possibile chiamare il metodo alert.cancel() in allerta (non il costruttore)

+0

come è possibile utilizzare l'avviso su un listener di clic quando è ancora in fase di creazione con il builder ... per favore spiega –

+1

My Java è un po 'arrugginito ma prima dovresti creare l'oggetto AlertDialog e POI chiamare il setButton (BUTTON_POSITIVE, " OK ", listener DialogInterface.OnClickListener) sull'oggetto AlertDialog. http://developer.android.com/reference/android/app/AlertDialog.html#setButton%28int,%20java.lang.CharSequence,%20android.content.DialogInterface.OnClickListener%29 – PowerAktar

+0

Il codice nella risposta sopra semplicemente funziona. Dovrebbe essere la risposta corretta – Sandeep

0

si può semplicemente riavviare l'attività in cui pubblicare gli alertdialog o un'altra attività dipendono il tuo giudizio se si desidera riavviare l'attività utilizzare questo finish(); startActivity (getIntent());

2
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
AlertDialog alert = builder.create(); 
alert.show(); 

Il codice precedente funziona, ma assicuratevi di effettuare alert una variabile globale in modo da poter raggiungere da all'interno del metodo onClick.

+0

Non è necessario che una variabile globale ricordi la finestra di dialogo. Lo recuperi come primo argomento nel metodo onclick. – Bananeweizen

+0

Necessario, se si desidera eliminarlo da qualche parte ELSE. QUESTO È IL MODO GIUSTO, specialmente con le implementazioni AlertDialog.OnClickListener –

0
alertDialog.setPositiveButton("SAVE", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         /*Write your code here */ 
         dialog.dismiss(); 
        } 
       }); 
     alertDialog.setNegativeButton("CANCEL", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 

        } 
       }); 
+0

Benvenuti in StackOverflow. Questa risposta potrebbe richiedere un po 'più di spiegazione per gli altri programmatori per capire come funziona. – Daenarys

5
AlertDialog.Builder ad = new AlertDialog.Builder(this); 
ad.setTitle("Unanswered Questions"); 
ad.setMessage("You have not answered all the questions."); 
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
    dialog.dismiss(); 
} 
}); 
ad.show(); 
1

Uso di dialogo invece di AlertDialog

AlertDialog non avere dismiss() ma AlertDialog ha alcuni metodi per pulsante mi piace setPositiveButton().

Si consiglia di utilizzare la finestra di dialogo se si desidera una finestra di dialogo personalizzata.

3

Rispondere a un vecchio post, ma si spera che qualcuno possa trovare utile questo. Fate questo invece

final AlertDialog builder = new AlertDialog.Builder(getActivity()).create(); 

È quindi possibile andare avanti e farlo,

builder.dismiss(); 
0

ho provato la soluzione di PowerAktar, ma l'AlertDialog e il costruttore sempre tenuto parti separate. Quindi, come ottenere il "vero" AlertDialog?

ho trovato le mie soluzioni nello spettacolo-dialogo: Si scrive

ad.show(); 

per visualizzare la finestra di dialogo. Nell'aiuto di show dice "Crea un AlertDialog con gli argomenti forniti a questo builder e Dialog.show() è la finestra di dialogo". Quindi il dialogo è finalmente creato qui. Il risultato dello show() - Command è AlertDialog stesso. Quindi è possibile utilizzare questo risultato:

AlertDialog adTrueDialog; 
adTrueDialog = ad.show(); 

Con questa adTrueDialog è possibile annullare() ...

adTrueDialog.cancel() 

o per eseguire il comando a pulsanti all'interno della finestra di dialogo:

Button buttonPositive = adTrueDialog.getButton(Dialog.BUTTON_POSITIVE); 
buttonPositive.performClick(); 
-2

Se si utilizza già il pulsante positivo e negativo (come faccio nel mio progetto) è possibile utilizzare il pulsante Neutro per chiudere la finestra di dialogo.

Ho anche notato che nella versione Android> 5 la finestra di dialogo si chiude facendo clic all'esterno della finestra di dialogo, ma nella versione precedente ciò non avviene.

ad.setNeutralButton("CLOSE", new DialogInterface.OnClickListener(){ 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // close dialog 
    } 
}); 
+0

Wrong, '.setCancelable (bool)' è usato per definire il comportamento di cliccare fuori dalla finestra. –

+0

@ M.Haché cosa c'è di sbagliato nel dire che ho notato qualcosa ?? Non ho detto che è un comportamento obbligatorio. Ho appena provato su due dispositivi diversi con sistemi operativi diversi .... – nmirkov

+0

Non c'è niente di sbagliato nella condivisione di qualcosa che hai vissuto. Tuttavia, quello che hai scritto è fuorviante e potrebbe essere migliorato con l'aiuto di una rapida ricerca su google. –

Problemi correlati