poniedziałek, 17 lutego 2014

Obsługa zdarzenia kliknięcia na komponent

Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.

Obsługiwać zdarzenie kliknięcia komponentu można na kilka sposobów. Przedstawię trzy najpopularniejsze. Do wszystkich trzech sposobów będzie nam potrzebny jakiś komponent na którego kliknięcie będziemy reagować. Z tego powodu przyklejam na ekranie jeden przycisk.


Pierwszy najprostszy w przygotowaniu i chyba najbardziej przejrzysty, ale też najmniej czytelny i wymagający dużo kodu. Tworzymy osobno listener kliknięcia (czyli słuchacza zdarzenia kliknięcia – czeka aż klikniesz i reaguje) i podpinamy go do guzika:


To co się ma wydarzyć w wyniku kliknięcia jest opisane w metodzie onClickk listenera. W tym przypadku jest to wyświetlenie komunikatu Toast z tekstem „om nom nom” (linia 23). Samo podpięcie stworzonego listenera odbywa się w linii 27.


Alternatywnie choć na podobnej zasadzie możemy utworzyć obiekt listenera w momencie jego tworzenia – linia 19. Mniej kodu, ale czytelność na tym traci. Efekt działania identyczny jak poprzednio.


Trzecia alternatywna metoda jest chyba najmniej intuicyjna, ale jak się zrozumie zasadę działania to kod przy większej ilości guzików do obsługi będzie najbardziej przejrzysty i bardzo wygodny w rozwijaniu. Tym razem nie definiuję żadnego listenera! Wszystko co ma się zdarzyć po kliknięciu przycisku jest opisane w metodzie obslugaKlikniecia. Wazne by metoda ta przyjmowala jako parametr obiekt klasy View (po tej klasie dziedziczą wszystkie komponenty takie jak guzik i to właśnie pod postacią tego parametru jest przekazywany obiekt komponentu do metody) i nic nie zwracała. Pozornie metoda jako taka nie jest w żaden sposób związana z obsługą kliknięcia na przycisk:


Magia zaczyna dziać się dopiero w pliku layoutu związanym z tą aktywnością:


Pojawił nam się tutaj (linia 19) nowy element: android:onClick. Zamiast związywać na poziomie kodu javowego metodę obslugaKlikniecia z specjalnie do tego tworzonym listenerem, wskazujemy nazwę metody przy użyciu parametru przycisku w pliku layoutu. Takie rozwiązanie ma ten plus, że pisze się znacznie mniej kodu, a sam kod przy większej liczbie obsługiwanych przycisków jest czytelniejszy. Z drugiej strony, jeśli nie będziemy pamiętać o takim rozwiązaniu, możemy za jakiś czas zachodzić w głowę jak to zostało zrobione :)
Pamiętajmy że obsługa kliknięcia nie dotyczy tylko przycisków, ale każdego komponentu dziedziczącego po View – w tym napisy i pola edycyjne.

1 komentarz:

  1. XML:
    android:onClick="klikniento"
    Java:
    public void klikniento( View v){
    //polecenia do wykonania
    }

    OdpowiedzUsuń