1. Listener dla przycisku. Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod: W linii 24 tworzymy globalną metodę mglobal_onclicklistener, która obsługuje zdarzenia dla (w tym przypadku) dwóch przycisków. W analogiczny sposób możemy dokładać kolejne przyciski. 2. Pola edycyjne EditText. Pola tego typu służą generalnie do wprowadzania różnego rodzaju treści, np: loginy, hasła, urodzenia, dodatkowe informacje, itp. Ponieważ na niektórych urządzeniach z systemem Android mamy stosunkowe małe ekrany, dlatego niekiedy nie ma miejsca na stosowanie dodatkowych etykiet, które opisywałyby dane pole edycyjne. Dlatego stosuje się bardzo często podpowiedzi w samym polu edycyjnym, tzw. hint. Możliwości ustawienia hintów jest kilka, natomiast poniżej zostaną przedstawione dwie: a) Zaczynamy od wstawienia do naszej aktywności komponentu klasy Plain Text:
b) W klasie danej aktywności wykorzystujemy metodę sethint klasy EditText. Aby nasz Hint działa już od samego początku uruchomienia aplikacji, musimy kod umieścić w metodzie oncreate linie 22,23,24; Efekt:
Można też ustawić zawartość Hint a z pozycji kodu na wartość z pliku strings.xml wpisując: et.sethint(getstring(r.string.nazwa_elementu_w_string_xml)); Kolejna metoda, bardziej elegancka, która pozwala tak naprawdę na oddzielenie logiki aplikacji od interfejsu użytkownika, to ustawienie odpowiedniego atrybutu w pliku XML naszego widoku (linia 24):
Pobieranie tekstu z EditText Po wstawieniu do naszej aplikacji odpowiednich pól typu EditText, oczywistym jest, że możemy pobrać ich zwartość. Zademonstrowane zostanie to na przykładzie jednego widoku z przyciskiem i polem EditText, tak jak to jest pokazane na poniższym rysunku:
Zawartość pliku XML widoku:
Nasz cel: po uruchomieniu aplikacji, wpisujemy Imię w polu edycyjnym, następnie wciskając przycisk pobieramy zawartość pola edycyjnego i wyświetlamy Toast. Aby zrealizować nasz cel, musimy wpisać odpowiedni kod w pliku JAVA aktywności:
W linii 32 pobieramy ciąg znaków z pola edycyjnego, a następnie w linii 33 wyświetlamy Toast. 3. Intencje Intencje obok Aktywności są jednym z podstawowych komponentów z których zbudowane są Androidowe aplikacje. Mechanizm ten odpowiedzialny jest przede wszystkim za obsługę rozkazów wydawanych przez użytkownika. Za pomocą intencji możemy wprowadzić komunikację pomiędzy aplikacjami (lub mniejszymi komponentami, jak Usługi, Aktywności itp.). Jednak najważniejszym zadaniem tego komponentu jest uruchamianie odpowiednich aplikacji/aktywności. Typy uruchomień Intencje uruchamiające podzielone zostały na dwa główne typy: Jawne (explicit) czyli takie, w których jasno precyzujemy obiekt, który chcemy stworzyć. W tym wypadku jednym z argumentów konstruktora Intencji jest obiekt typu Class (np. MainActivity.class) wskazujący na klasę, której obiekt chcemy stworzyć. Najprostszy przykład to: Intent intent = new Intent(context, MainActivity.class); Intencja ta, jak łatwo się domyślić, uruchomi aktywność MainActivity. Niejawne (implicit) są to intencje, w których zawieramy informacje o tym co chcemy zrobić, bez podawania konkretnych klas, które mają to zrealizować. Najczęściej opisujemy to dwoma
informacjami co chcemy zrobić i na jakich danych chcemy tą czynność wykonać. W takim wypadku to system (za pomocą Filtrów Intencji) decyduje jaka Aktywność ma być uruchomiona. Przykład: Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")); W tym wypadku informujemy nasz system o tym, że chcemy zobaczyć dane (Intent.ACTION_VIEW) zapisane pod adresem URI (w tym wypadku adres URL strony). Przykłady innych zastosowań możemy znaleźć w dokumentacji: http://developer.android.com/reference/android/content/intent.html Przesyłanie danych Oprócz uruchamiania komponentów Intencje pozwalają na dołączanie informacji, które mogą być przesłane do uruchamianego obiektu. Służy do tego zestaw metod putextra( ), które pozwalają na dołączanie danych w postaci typów prostych (lub paczek Bundle). Przykładem takiej operacji niech będzie: intent.putextra("userid", 123); Aby pobrać powyższe dane w nowo uruchomionej Aktywności należy wykonać komplet poniższych operacji: Intent intent = getintent(); int userid = intent.getintextra("userid", 0); Pierwsza linijka pobiera Intencję, która uruchomiła Aktywność (należy pamiętać o sprawdzeniu czy przypadkiem zawracana wartość nie jest nullem). Druga linijka to pobranie wartości za pomocą jednej z metod get Extra( ). Pierwszym argumentem tych metod jest nazwa pod którą dana wartość została zapisana. Drugim natomiast wartość domyślna, na wypadek gdyby Intencja nie zawierała żadnych danych zapisanych pod podanym ciągiem znaków. Przykład: Tworzymy nowy projekt aplikacji, a następnie dodajemy do niego nową aktywność. W tym celu w okienku Project klikamy PPM na folderze JAVA i wybieramy New->Activity->Blank Activity:
Wybieramy nazwę nowej aktywności i klikamy Finish. W tym momencie zostanie utworzony nowy plik nazwa_aktywnosci.java oraz nowy plik XML z układem aktywności w folderze layout.
Proszę zwrócić uwagę, że w pliku manifestu został dodany nowy wpis! Naszym zadaniem będzie pobranie tekstu z pola edycyjnego, przesłanie go do drugiej aktywności i wyświetlenie w polu TextView. Poniżej przedstawione są zawartości poszczególnych plików: MyActivity.java
MyActivity2.java Aby odebrać przekazany obiekt, tworzymy po stronie wywoływanej aktywności obiekt klasy Bundle z którego pobieramy zbiór przekazanych obiektów przy użyciu metody getextras(). Z wiązki tej musimy teraz wybrać obiekt który nas interesuje jest to obiekt o identyfikatorze zmienna. Odebrany tekst wyświetlamy w polu TextView:
Activity_my.xml
Activity_my_activity2.xml
Przykład 2 Kolejnym przykładem będzie możliwość zastosowania Intencji do wywołania strony internetowej. Pozwala na to poniższy kod: Platforma Android sprawdza jaki program odpowiada za obsługę takich intencji i przekazuje mu ją. Ponieważ chcemy nawiązać połączenie z Internetem, musimy zadbać o dodanie stosownych uprawnień do pliku manifestu.