2013-02-13 15 views
33

stworzyłem AlertDialog który zawiera 4 przyciskiJak odwołać AlertDialog w 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(); 

Chcę odwołać go po sposobie SetBackground(), jak mogę to zrobić? z góry dzięki.

+2

Proszę używać konwencji nazewnictwa Java: metody i zmienne nazwy powinny zaczynać się od małej litery. – nhaarman

+0

użyć dialog.dismiss(); po SetBackground(); – saran

+0

@DaanGeurts - nie ma żadnej metody 'dismiss()' z klasy 'AlertDialog.Builder'. – user370305

Odpowiedz

107

W rzeczywistości nie ma żadnej metody cancel() lub dismiss() z klasy AlertDialog.Builder.

Więc zamiast AlertDialog.Builder OptionDialog użyj instancji AlertDialog.

Jak,

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

Teraz Wystarczy zadzwonić OptionDialog.dismiss();

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

Naprawdę ładne, część ważna to: "NOT CREATE A (AlertDialog.Builder OptionDialog = AlertDialog.Builder (getActivity());) jeśli nie tworzyć (AlertDialog OptionDialog = new AlertDialog.Builder (this) .create();) after możesz wywoływać .dismiss(), tak wielkie, dziękuję !!!!! – delive

+0

Uwaga jest tutaj, że 'OptionDialog' musi być widoczny dla onclick listerner we fragmencie powyżej.Jednym sposobem, aby to zrobić, jest zadeklarowanie' AlertDialog' jako zmienna składowa w nadrzędnej klasie aktywności –

6

Spróbuj tego:

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

dlaczego punkt zmniejszył się to jest dla mnie sprawdzone –

+0

Próbowałem tego wcześniej i nie pracował dla mnie, dopóki nie użyłem kodu, który jest w zaakceptowanej odpowiedzi –

+0

OK, tęsknię za tą linią AlertDialog.Builder builder = new AlertDialog.Builder (this), teraz edytuj odpowiedź ... –

45

myślę, że to prostsze rozwiązanie: Wystarczy użyć DialogInterface argumentem, który jest przekazywany do metody onClick.

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

Zobacz na przykład http://www.mkyong.com/android/android-alert-dialog-example.

+2

'd.dismiss();' pracował dla mnie, i Tak, ten jest prostszy i rodzimy dla AlertDialog – rupinderjeet

+1

Dużo ter rozwiązanie –

0

Wystarczy spróbować -

OptionDialog.create().dismiss(); 

nadzieję, że to rozwiąże problem.

+0

Stworzy nową instancję i dlatego aktualnie wyświetlane okno dialogowe nie zostanie zamknięte. –

1

Istnieją dwa sposoby zamknięcia okna alertu.

Wariant 1:

AlertDialog#create().dismiss();

Opcja 2:

The DialogInterface#dismiss();

Out of the box, ramy zwraca DialogInterface#dismiss(); podczas definiowania detektory zdarzeń dla przycisków:

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

dla okna Alert.

0

Oto Jak zamknę 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

Wystarczy ustawić widok za nieważną, że zamknie prostego AlertDialog.

0

Aby zamknąć lub anulować AlertDialog.Konstruktor

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

zadzwonić odrzucenie() w interfejsie dialogowym

Powiązane problemy