2013-02-13 10 views
33

ho creato AlertDialog che contiene 4 bottoniCome respingere AlertDialog in Android

OptionDialog = new AlertDialog.Builder(this); 
     OptionDialog.setTitle("Options"); 
     LayoutInflater li = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = li.inflate(R.layout.options, null, false); 
     background = (Button) v.findViewById(R.id.bkgSpinnerLabel); 
     SoundVib = (Button) v.findViewById(R.id.SoundVibSpinnerLabel); 

     OptionDialog.setView(v); 
     OptionDialog.setCancelable(true); 
     OptionDialog.setNeutralButton("Ok", 
       new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface arg0, int arg1) { 
        } 
       }); 
     background.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       SetBackground(); 
      // here I want to dismiss it after SetBackground() method 
      } 
     }); 


     SoundVib.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent soundVibIntent = new Intent(SebhaActivity.this, EditPreferences.class); 
       startActivity(soundVibIntent); 
      } 
     }); 

     OptionDialog.show(); 

voglio respingerlo dopo che il metodo setBackground(), come posso fare questo? grazie in anticipo.

+2

Si prega di utilizzare le convenzioni di denominazione java: metodi e nomi delle variabili devono iniziare con una lettera minuscola. – nhaarman

+0

usa dialog.dismiss(); dopo SetBackground(); – saran

+0

@DaanGeurts - non esiste alcun metodo 'dismiss()' dalla classe 'AlertDialog.Builder'. – user370305

risposta

107

In realtà non esiste alcun metodo cancel() o dismiss() dalla classe AlertDialog.Builder.

Quindi invece di AlertDialog.Builder OptionDialog utilizzare l'istanza AlertDialog.

Come,

AlertDialog OptionDialog = new AlertDialog.Builder(this).create(); 

Ora, basta chiamare OptionDialog.dismiss();

background.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     SetBackground(); 
     // here I want to dismiss it after SetBackground() method 
     OptionDialog.dismiss(); 
    } 
}); 
+0

Davvero bello, la parte importante è: "NON CREA A (AlertDialog.Builder OptionDialog = AlertDialog.Builder (getActivity());) se non crea (AlertDialog OptionDialog = new AlertDialog.Builder (this) .create();) dopo puoi chiamare .dismiss(); così bello, grazie !!!!! – delive

+0

Una nota qui è che 'OptionDialog' deve essere visibile al listerner onclick nel frammento sopra.Un modo per farlo è dichiarare il' AlertDialog' come variabile membro nella classe di attività parent. –

6

Prova questa:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    AlertDialog OptionDialog = builder.create(); 
    background.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      SetBackground(); 
     OptionDialog .dismiss(); 
     } 
    }); 
+0

perché il punto è diminuito questo è funzionato per me –

+0

Ho provato questo prima e non ha funzionato per me fino a quando non ho usato il codice che è nella risposta accettata –

+0

ok ho perso la linea AlertDialog.Builder builder = new AlertDialog.Builder (this); ora modifica la risposta ... –

45

Penso che ci sia una soluzione più semplice: Basta usare l'argomento DialogInterface che viene passato al metodo onClick.

AlertDialog.Builder db = new AlertDialog.Builder(context); 
     db.setNegativeButton("cancel", new DialogInterface.OnClickListener(){ 
      @Override 
      public void onClick(DialogInterface d, int arg1) { 
       d.cancel(); 
      }; 
     }); 

Vedi, per esempio, http://www.mkyong.com/android/android-alert-dialog-example.

+2

'd.dismiss();' ha funzionato per me, e Sì, questo è più semplice e nativo di AlertDialog – rupinderjeet

+1

Una scommessa molto soluzione –

0

Basta provare questo -

OptionDialog.create().dismiss(); 

Spero che questo risolverà il vostro problema.

+0

Creerà la nuova istanza e pertanto la finestra di dialogo attualmente visualizzata non verrà chiusa. –

1

Esistono due modi per chiudere una finestra di avviso.

Opzione 1:

AlertDialog#create().dismiss();

Opzione 2:

The DialogInterface#dismiss();

Fuori dalla scatola, il framework chiama DialogInterface#dismiss(); quando si definiscono i listener di eventi per i pulsanti:

  1. AlertDialog#setNegativeButton();
  2. AlertDialog#setPositiveButton();
  3. AlertDialog#setNeutralButton();

per la finestra di avviso.

0

ecco come lo chiudo il mio alertDialog

lv_three.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
       GetTalebeDataUser clickedObj = (GetTalebeDataUser) parent.getItemAtPosition(position); 
       alertDialog.setTitle(clickedObj.getAd()); 
       alertDialog.setMessage("Öğrenci Bilgileri Güncelle?"); 
       alertDialog.setIcon(R.drawable.ic_info); 
       // Setting Positive "Yes" Button 
       alertDialog.setPositiveButton("Tamam", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         // User pressed YES button. Write Logic Here 
        } 
       }); 
       alertDialog.setNegativeButton("İptal", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         //alertDialog. 
         alertDialog.setCancelable(true); // HERE 

        } 
       }); 
       alertDialog.show(); 
       return true; 
      } 
     }); 
0

Basta impostare la vista come nulla che chiuderà la semplice AlertDialog.

0

Per chiudere o annullare AlertDialog.Builder

dialog.setNegativeButton("إلغاء", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         dialogInterface.dismiss(); 
        } 
       }); 

si chiama respingere() nella finestra di dialogo dell'interfaccia