2013-05-07 10 views
7

Używam showDialog i dismissDialog w działaniu, aby wyświetlić i zniszczyć moje okno dialogowe. Czy istnieje również sposób wydawania polecenia kliknięcia w aktualnie wyświetlanym oknie dialogowym bez zachowania zmiennej odnoszącej się do okna dialogowego?Jak kliknąć "OK" na AlertDialog przez kod?

Na przykład chcę nacisnąć przycisk "Ok"/pozytywny w oknie dialogowym za pomocą kodu.

+0

Czy używasz narzędzia do budowania okna dialogowego? – TronicZomB

+0

@TronicZomB: Tak, używam 'Builder' i nadpisuję' onCreateDialog' w 'Activity', aby skonfigurować moje okno dialogowe. – Arci

+1

OK, bakriOnFire ma raczej dobry przykład tego, co właściwie zamierzałem opublikować, zanim zauważyłem jego odpowiedź. To jest właśnie to, co chcesz wymodelować twój kod. – TronicZomB

Odpowiedz

25

nie testowałem ten kod, ale to powinno działać:

AlertDialog dialog = ... 
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); 

Ewentualnie, jeśli nie chcesz zachować odniesienie do okna, ale masz kontrolę nad jego konfiguracją, możesz wyodrębnić kod kliknięcia w inny sposób:

AlertDialog.Builder builder = ... 
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    onPositiveButtonClicked(); 
    } 
}); 

i implementacja onPositiveButtonClicked() w swojej Działalności. Zamiast programowo klikając przycisk OK, możesz zadzwonić pod numer onPositiveButtonClicked() i dismissDialog(id). Jeśli potrzebujesz obsługi wielu okien dialogowych, zmień parametr na onPositiveButtonClicked.

+0

Dzięki, ale używam Buildera i nie ma metody "getButton". Czy istnieje sposób na kliknięcie przycisku "OK" bez zachowania odniesienia do rzeczywistego okna dialogowego? – Arci

+2

Jeśli możesz zachować odniesienie do okna dialogowego, instancja AlertDialog jest zwracana przez AlertDialog.Builder # show(). W przeciwnym razie, czy możliwe jest przeniesienie logiki kliknięcia do osobnej metody? Zamiast symulować kliknięcie, można po prostu wykonać kod kliknięcia i zamknąć okno dialogowe. –

+0

Tak, zwraca 'AlertDialog', ale nie chcę utrzymywać zmiennej odwołującej się do' AlertDialog'. Czy istnieje sposób, aby uzyskać dostęp do okna dialogowego za pomocą "Activity", biorąc pod uwagę, że mam identyfikator okna dialogowego? – Arci

-1

Spróbuj tego: -

AlertDialog.Builder alBuilder = new AlertDialog.Builder(this); 
     alBuilder 
       .setMessage("Do you wamt to exit?") 
       .setPositiveButton("Yes", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for Yes 
          } 
         }) 
       .setNegativeButton("No", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           dialog.cancel(); 
           // Write your code here for No 
          } 
         }); 
     alBuilder.setCancelable(false); 
     alBuilder.show(); 
+0

Dzięki! Ale myślę, że źle zrozumiałeś moje pytanie. – Arci

+0

można opublikować kod ur, abyśmy mogli zrozumieć, który chcesz .. – bakriOnFire

+0

Szukam czegoś typu 'activity.getActiveDialog (DIALOG_ID) .getButton (...). PerformClick()'. Podobnie jak "activity.dismissDialog (DIALOG_ID)", w którym możesz zamknąć okno dialogowe, używając tylko DIALOG_ID. – Arci

4

Chcę naciśnij „OK” pozytywny przycisk okna/poprzez kod

Tak, można to zrobić poprzez uzyskanie wystąpienie z POSITIVE przycisk, a następnie zadzwonić performClick() na nim. wypróbuj jako:

Button okButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 
okButton.performClick(); //<<< click Button using code 
+0

Dzięki! Ale co, jeśli nie mam odniesienia do "zmiennej"? Czy istnieje sposób uzyskania dostępu do przycisku "POZYTYWNEGO" za pomocą samego "działania" (podobnie do "dismissDialog")? – Arci

Powiązane problemy