Android Wykład 3 1
Zdarzenia Klasa Application Powiadomienia Toast AlertDialog 2
Zdarzenia UI (UI Events) zapewniają programowi interakcje z użytkownikiem. Obiekty określają wzajemne oddziaływania z resztą "świata" poprzez metody, które ujawniają. Gdy naciskamy przycisk oczekujemy konkretnej akcji, tą akcję zapewniają nam właśnie metody, 3
W Androidzie dzieje się to poprzez przchwytywanie zdarzenia z danego obiektu klasy View. Klasa View stanowi klasę bazową dla wszystkich widgetów GUI (Button, RadioButton, TextView, itd ) zwanych Widokami (Views). Wśród różnych obiektów klasy View zdefiniowane są publiczne metody zapewniające obsługę zdarzeń UI. 4
Metody te są wywoływane przez framework Androida gdy zajdzie odpowiednia akcja (zdarzenie). I tak o to kiedy obiekt View (np. Button) jest dotknięty, wywoływana jest metoda ontouchevent(). Aby tak się stało należy rozszerzyć klasę o odpowiedni interfejs (interface) oraz nadpisać metodę docelową. 5
Interfejs jest pośrednikiem pomiędzy zdarzeniem a reakcją. Ponadto z uwagi, że zdefiniowane metody są puste nie ma konieczności jawnego powiadamiania kompilatora o tym fakcie poprzez zastosowanie adnotacją @Override. 6
Klasa View zawiera kolekcję zagnieżdżonych interfejsów - zwanych nasłuchiwaczami zdarzeń (Event listeners). Interfejs w reakcji na zdarzenie (dotknięcie, zmiana parametru, itd...) wywołuje odpowiednią metodą (zdefiniowaną w nim). Oczywiście istnieje możliwość rozszerzania klasy View poprzez definiowanie własnych zdarzeń 7
onclick() - z View.OnClickListener. Metoda jest wywoływana, gdy użytkownik dotknie obiekt albo skupi uwagę na obiekcie za pomocą nawigacji lub trackballa i wciśnie odpowiadający klawisz zatwierdzający. 8
onlongclick() - z View.OnLongClickListener. Metoda jest wywoływana gdy użytkownik dotknie i przytrzyma obiekt. W przypadku gdy nie ma modułu dodykowego tyczy to się zdarzenia, w którym użytkownik wybierze obiekt a następnie wciśnie i przytrzyma odpowiedni klawisz. 9
onfocuschange() - z View.OnFocusChangeListener. Metoda wywoływana, gdy użytkownik skupi/zmieni uwagę (focus) na obiekcie za pomocą przycisków nawigacyjnych lub trackballa. onkey() - z View.OnKeyListener. Ta metoda jest wywoływana gdy użytkownik wciśnie dowolny klawisz na urządzeniu. 10
ontouch() - z View.OnTouchListener. Ta metoda jest wywoływana gdy użytkownik wykona akcję kwalifikowaną jako zdarzenie dodykowe, czyli wciśnie lub wykona gest. oncreatecontextmenu() - z View.OnCreateContextMenuListener. Z kolei ta metoda jest wywoływana w momencie utworzenia menu kontekstowego. 11
Wymienione zdarzenia klasy View często określane są mianem zdarzeń wejściowych (Input events). Warto też dodać, że inne klasy bazowe np. Text również posiadają zdarzenia - np. TextWatcher - te jednak mniej zależą od bezpośredniego udziału użytkownika a reagują na bodźce w programie. 12
Klasa aplikacji (ang. Application class) jest jedną z powszechniej używanych klas bazowych w Androidzie Jest to klasa poziomu aplikacji - zwana także kontrolerem (ang. controller). Obiekt aplikacji, tworzony w momencie jej uruchamiania i usuwany w momemcie jej zamykania - reprezentuje wspólny stan naszej całej aplikacji. 13
Większość aplikacji korzysta z domyślnej klasy dostarczonej przez framework (android.app.application). Oczywiście istnieje możliwość implementacji własnej instancji tego obiektu i zarządzanie globalnym stanem naszej aplikacji czy też dodanie obsługi (wspólnej dla reszty aplikacji) funkcjonalności. 14
Aby zaimplementować własną klasę aplikacji należy: Utworzyć nową klasę dziedziczącą po klasie aplikacji. Zrejstrować tą klasę w pliku Manifest.xml. 15
Poniżej przykład implementacji przykładowej klasy aplikacji: 16
Aby zarejestrować w pliku Manifest naszą własną instancję aplikacji należy dodać atrybut android:name=".someapplication" do elementu : 17
Cykl życiowy obiektu aplikacji reprezentują tylko 2 metody: oncreate() - wykonywana w momencie uruchamiania procesu naszej aplikacji, oraz onterminate() - wykonywana w momencie zamykania procesu naszej aplikacji. 18
Nie ma metod onpause() - ani ondestroy(), typowych dla aktywności (ang. Activities. Ponadto, mamy do dyspozycji metody - dzięki którym w prosty sposób możemy reagować na bodźce z systemu, w którym działa nasza aplikacja. 19
Są to: onconfigurationchanged(configuration newconfig) - metoda wywoływana w trakcie gdy w systemie, w kótrym nasza aplikacja działa - zajdą jakiekolwiek zmiany w konfiguracji, 20
onlowmemory() - metoda wywoływana, gdy system pracuje na niskim poziomie pamięci - tu możemy uwolnić nieużywane zasoby - zaraz po tej metodzie do akcji wkracza GC (ang. Garbage collector), ontrimmemory(int level) - ta metoda jest wywoływana gdy system, uznał że np. nasza działająca w tle aplikacja nie potrzbuje więcej pamięci i nam ją zabiera. 21
Wracając do wspomnianych na początku zalet korzystania z własnej implementacji obiektu aplikacji - jedną z niewątpliwych jest zarządzanie globalnym stanem naszej aplikacji. Równie przydatnym jest dzielenie w obrębie aplikacji wspólnych metod. 22
Aby uzyskać dostęp do tych metod, wpierw należy uzyskać instancję obiektu naszej aplikacji: SomeApplication someapplication = (SomeApplication)getApplication(); 23
Tu warto jednak dodać, że zazwyczaj nie ma potrzeby implementacji własnej klasy Application. Zwłaszcza, jeśli chcemy np. tylko dzielić wspólne metody w obrębie naszej aplikacji. 24
Statyczne singletony mogą zapewnić tą samą funkcjonalność w bardziej elastyczny sposób. W przypadku, gdyby taki singleton potrzebował globalny kontekst - dostarczamy go poprzez wywołanie Context.getApplicationContext(). 25
Czasami może pojawić zajść potrzeba powiadomienia użytkownika o zdarzeniu, które występuje w aplikacji. Niektóre powiadomienia wymagają od użytkownika odpowiedzi, a inni nie. 26
Na przykład: Kiedy zdarzenie, takie jak zapisywanie pliku jest zakończone, powinien pojawić się komunikat potwierdzający sukces zapisu danych. Jeżeli aplikacja działa w tle i potrzebuje uwagi użytkownika, aplikacja powinna stworzyć powiadomienie, które pozwala użytkownikowi na reakcję 27
Jeśli aplikacja wykonuje długotrwałą pracę na wynik której użytkownik musi czekać (np. ładowania pliku), aplikacja powinna w jakiś sposób zasygnalizować ten stan poprzez np wyświetlenie paska postępu. 28
Każde z tych zadań powiadamiania można osiągnąć stosując inną technikę: Toast Notification krótki komunikat Status Bar Notification powiadomienie na pasku stanu Dialog Notification powiadomienie w postaci okna dialogowego 29
Powiadomienie typu Toast może być wyświetlone z poziomu aktywności (Activity) lub usługi (Service) Jest to rodzaj powiadomienia stosowany wtedy, kiedy nie zachodzi potrzeba pobrania odpowiedzi od użytkownika 30
Standardowo powiadomienie typu Toast wyświetlane jest w dolnej części ekranu. Można zmienić położenie okna powiadomienia wykorzystując metodę setgravity(int, int, int) toast.setgravity(gravity.top Gravity.LEFT, 0, 0); 31
Użytkownik może przygotować własne powiadomienie typu Toast Należy przygotować układ okna powiadomienia, zawartość umieszczając w pliku.xml 32
33
34
35
36
37
38
39
Dialog można również skonstruować w postaci listy opcji do wyboru Zamiast dodawania do dialogu przycisków dodajemy listę elementów korzystając z metody setitems 40
41
42
KONIEC 43