[Android][Java] Niejasna zasada działania metody z AlertDialog.Buider

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
soulreaver1
Wytworny Kaczor
Wytworny Kaczor
Posty: 409
Rejestracja: 13 mar 2009, 10:03
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: 127.0.0.1

[Android][Java] Niejasna zasada działania metody z AlertDialog.Buider

Post autor: soulreaver1 »

Więc mam pewną metodę aalert(). Kompletnie nie rozumiem co się dzieje przy wywołaniu alert.setPositiveButton. Mógłby mi ktoś to wyjaśnić, krok po kroku?

Kod: Zaznacz cały

    public void aalert() {
        AlertDialog.Builder alert = new AlertDialog.Builder(DisplayMessageActivity.this);
        
        alert.setTitle("Are u ok?");
        alert.setMessage("?");
        alert.setPositiveButton("Tak",
         new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
           Toast.makeText(DisplayMessageActivity.this, "Success", Toast.LENGTH_SHORT).show();
          }
         });

        alert.show();
    }
Do tej pory byłem przekonany że w javie nie tworzy się instancji interfejsów.
Knypolek
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 21 lis 2010, 21:20
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

Re: [Android][Java] Niejasna zasada działania metody z AlertDialog.Buider

Post autor: Knypolek »

Kod: Zaznacz cały

http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setPositiveButton(int, android.content.DialogInterface.OnClickListener)
Z tego co ja zakumałem, to po naciśnięciu na stworzony button (PositiveButton) uaktywnia się listener, który wyświetla "Success".
Awatar użytkownika
soulreaver1
Wytworny Kaczor
Wytworny Kaczor
Posty: 409
Rejestracja: 13 mar 2009, 10:03
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: 127.0.0.1

Re: [Android][Java] Niejasna zasada działania metody z AlertDialog.Buider

Post autor: soulreaver1 »

Nie chodzi mi o to jaki jest efekt, tylko w jaki sposób wywoływana jest metoda alert.setPositiveButton().
Paminol
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 172
Rejestracja: 09 lip 2012, 16:53
Płeć: Mężczyzna
Wersja Ubuntu: 14.04
Środowisko graficzne: Xfce
Architektura: x86_64

Re: [Android][Java] Niejasna zasada działania metody z AlertDialog.Buider

Post autor: Paminol »

Awatar użytkownika
Yuri20
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 maja 2009, 13:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Re: [Android][Java] Niejasna zasada działania metody z AlertDialog.Buider

Post autor: Yuri20 »

W Javie nigdy nie tworzyło się obiektów interfejsów i ta zasada nadal obowiązuje. Za pomocą interfejsów można natomiast tworzyć referencje do obiektów, których klasy ten interfejs implementują. Dla przykładu String implementuje interfejs CharSequence, dlatego możliwa jest następująca konstrukcja:

CharSequence cs = new String("Ciąg znaków");

To co się dzieję w tej magicznej metodzie setPositiveButton to po prostu stworzenie obiektu klasy anonimowej rozszerzającej interfejs onClickListener. Konstrukcja jest mniej więcej taka:
new <klasa bądź interfejs do rozszerzenia>(){ .... ciało klasy .... };

Jeśli tworzona jest klasa anonimowa na podstawie interfejsu to konieczne jest zaimplementowanie metod abstrakcyjnych. Jak widać w przypadku OnClickListener trzeba zaimplementować metodę onClick.

Poczytaj sobie więcej klasach anonimowych.
Awatar użytkownika
soulreaver1
Wytworny Kaczor
Wytworny Kaczor
Posty: 409
Rejestracja: 13 mar 2009, 10:03
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: 127.0.0.1

Re: [Android][Java] Niejasna zasada działania metody z AlertDialog.Buider

Post autor: soulreaver1 »

Yuri20 pisze: To co się dzieję w tej magicznej metodzie setPositiveButton to po prostu stworzenie obiektu klasy anonimowej rozszerzającej interfejs onClickListener. Konstrukcja jest mniej więcej taka:
new <klasa bądź interfejs do rozszerzenia>(){ .... ciało klasy .... };

Jeśli tworzona jest klasa anonimowa na podstawie interfejsu to konieczne jest zaimplementowanie metod abstrakcyjnych. Jak widać w przypadku OnClickListener trzeba zaimplementować metodę onClick.

Poczytaj sobie więcej klasach anonimowych.


Dziękuje, właśnie na taką odpowiedź czekałem. Temat zamknięty.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 25 gości