Aktywności to podstawowe elementy związane z platformą Android. Dzięki poznaniu aktywności będziesz w stanie napisać pierwszą aplikację przeznaczoną na urządzenie mobilne. Po dodaniu kontrolek możesz w łatwy sposób stworzyć całkiem funkcjonalny programik. Ważne jest, aby poznać metody operowania na kontrolkach oraz to jak przechowywać ich referencje. Aktywności i widoki Pisząc aplikację dedykowaną na platformę Android musisz mieć świadomość, że składa się ona z aktywności i widoków. Są to podstawowe elementy reprezentujące okna nowej aplikacji. Aktywności to główne elementy z jakich zbudowane są aplikacje. Reprezentują one pojedyncze okno programu (choć nie jest to zasadą). Aktywności mają za zadanie realizowanie podstawowych operacji takich jak komunikacja z użytkownikiem, generowanie okna aplikacji itp. Każda aktywność dziedziczy z klasy Activity lub klas jej pochodnych. Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku. Widoki to obiekty tworzące interfejs użytkownika. Za pomocą widoków użytkownik komunikuje się z aplikacją (z aktywnościami). Na widok składa się układ kontrolek zawartych w odpowiedniej kompozycji (layout). Aby trochę rozjaśnić nadmiar teorii, można napisać wprost. Aktywności zawierają w sobie kod aplikacji, są zapisane w plikach z rozszerzeniem *.java. Z kolei widoki to wygląd okienka i układ kontrolek, które widzą użytkownicy programu, są zapisane w plikach z rozszerzeniem *.xml. Podczas tworzenia nowego projektu Androida automatycznie zostaje wygenerowana nowa aktywność o nazwie MainActivity. Jest do niej także przypisany automatycznie wygenerowany widok o nazwie activity_main. Dzięki temu, po utworzeniu nowego projektu od razu możesz uruchomić nową aplikację (Ctrl + F11). Jeżeli nie wiesz jak utworzyć nowy projekt, przeczytaj artykuł Jak zacząć z platformą Android? Tworzenie nowej aktywności Na potrzeby kursu, stwórzmy nową aktywność i prosty widok. W tym celu kliknij prawym Karol Trybulec p-programowanie.pl 1
przyciskiem myszy na nazwę projektu w Package Explorer po lewej stronie. Wybierz pozycję New > Other.. > Android Activity > Blank Activity. W nazwie aktywności wpisz NowaActivity a w nazwie widoku activity_nowa. Nazwy mogą być dowolne, ale dla porządku warto trzymać się tej koncepcji nazywania widoków i aktywności. Nie chcemy korzystać z fragmentów, a więc wpisujemy nazwę fragmentu taką samą jak nazwę widoku. Ostatnim ważnym krokiem jest zaznaczenie opcji Luncher Activity. Dzięki temu nasza aktywność stanie się aktywnością startową. Spójrzmy jak wygląda hierarchia plików w środowisku Eclipse. Na czerwono zaznaczyłem katalog zawierający aktywności, na niebiesko katalog z widokami a na zielono plik manifestu. Jak widać aktywność jest klasą publiczną i ma taką samą nazwę jak nazwa pliku aktywności. W metodzie OnCreate podpinamy się do widoku za pomocą metody setcontentview(). Resztę kodu należy usunąć (opisałem do w poprzednim artykule), w przeciwnym wypadku wystąpią u Ciebie błędy kompilacji. Reszta kodu odpowiedzialna jest za fragmenty, których nie chcemy obsługiwać oraz za obsługę menu. NowaActivity powinna ostatecznie wyglądać mniej więcej tak: Karol Trybulec p-programowanie.pl 2
To jeszcze nie koniec. Ostatnim krokiem jaki musimy wykonać jest edycja manifesu. W pliku manifest zawarte są różne informacje dotyczące naszej aplikacji. Nie będę opisywał tego pliku, jednak konieczna jest jego drobna modyfikacja w celu zmiany aktywności startowej. Kliknij dwukrotnie na pozycję AndroidManifest.xml. Będziemy edytować go w trybie tekstowym, w tym celu na poziomej belce kliknij na zakładkę AndroidManifest.xml W kodzie manifestu odnajdujemy definicję aktywności. Aby NowaActivity była startową musi posiadać filter LUNCHER. Z kolei aktywność MainActivity nie może posiadać tego filtra. Karol Trybulec p-programowanie.pl 3
<activity android:name="com.example.test.mainactivity" 1 android:label="@string/app_name"> 2 <intent-filter> 3 <action android:name="android.intent.action.main" /> 4 <!-- usuwamy stąd filter LUNCHER --> 5 </intent-filter> 6 </activity> 7 <activity android:name="com.example.test.nowaactivity" 8 android:label="@string/title_activity_nowa"> 9 <intent-filter> 10 <action android:name="android.intent.action.main" /> 11 <category android:name="android.intent.category.launcher" /> 12 </intent-filter> </activity> Modyfikacja widoku W poprzednim akapicie utworzyliśmy nową aktywność oraz ustawiliśmy ją jako startową. Podczas tworzenia aktywności automatycznie utworzony został widok o nazwie activity_nowa. Widok jest pusty, dodajmy do niego kilka kontrolek. Kliknij dwukrotnie na pozycję activity_nowa.xml. Pokaże się prosty edytor podobny do HTMLowych WYSIWYGów. Jeżeli zamiast edytora kontrolek widzisz składnię XML, przełącz się na poziomej belce na pozycję Graphical Layout (tak jak w przypadku edycji manifestu). Metodą drag & drop umieść na formie 3 kontrolki: TextView, EditText (PlainText) oraz Button. Znajdziesz je w zakładkach Form Widgets oraz Text Fields. Karol Trybulec p-programowanie.pl 4
To wszystko jeśli chodzi o edycję widoku, teraz wystarczy odpowiednio obsłużyć kontrolki umieszczone na formie. Obsługa kontrolek Obsługa kontrolek to ostatni element, który opiszę w tym artykule. Aby posiadać dostęp do kontrolek musimy zapisać ich referencje a później operować na nich. Otwórz plik aktywności NowaActivity. Następnie zdefiniuj 3 publiczne referencje dla kontrolek, których użyliśmy w widoku. Są to kolejno: TextView, EditText oraz Button. 1 2 3 4 5 6 7 8 9 10 11 12 13 public class NowaActivity extends ActionBarActivity { public TextView text1; public EditText edit1; public Button button1; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_nowa); Karol Trybulec p-programowanie.pl 5
Przy referencjach pojawi się błąd, jest to całkiem normalne. Do wszelkich referencji jakie definiujemy należy dodać importy. Możesz je wpisać ręcznie, automatycznie poprzez kliknięcia osobno w ikonkę błędu każdej referencji lub automatycznie dla całego projektu skrótem klawiaturowym. Skrót klawiaturowy organizujący importy to Ctrl + Shift + O. Dodaje on importy do używanych klas oraz usuwa importy, które nie są używane w danej aktywności. Po użyciu tego skrótu błędy powinny zniknąć. Posiadamy publiczne referencje oraz zaimportowaliśmy odpowiednie klasy. Ostatnim krokiem jest przypisanie referencji do kontrolek. Skorzystamy w tym celu z funkcji findviewbyid oraz z pliku R.java, który jest przez środowisko generowany automatycznie. Całość wygląda następująco: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class NowaActivity extends ActionBarActivity { public TextView text1; public EditText edit1; public Button button1; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_nowa); text1 = (TextView) findviewbyid(r.id.textview1); edit1 = (EditText) findviewbyid(r.id.edittext1); button1 = (Button) findviewbyid(r.id.button1); text1.settext("witaj!"); Jeżeli błędy nie zniknęły Jeżeli występują błędy przy referencjach, upewnij się, że zapisałeś widok po jego edycji. Jeżeli nie zapisałeś zmian w pliku widoku, obok jego nazwy na górnej poziomej belce będzie widoczna gwiazdka. Dodatkowo, plik R.java nie zostanie automatycznie wygenerowany co uniemożliwi przypisanie referencji do obiektów. Dzięki zdefiniowaniu referencji do kontrolek posiadamy dostęp do ich obiektów. W Karol Trybulec p-programowanie.pl 6
przykładzie wyżej ustawiamy tekst kontrolki textview1 na Witaj!. Aplikacja po uruchomieniu wygląda następująco: Posiadam referencję do przycisku, więc mamy fizyczny dostęp do obiektu. Niestety na tym etapie nie możemy obsłużyć kliknięcia, ponieważ do tego wymagany będzie słuchacz (listener) a konkretniej OnClickListener. Słuchacze służą do przechwytywania zdarzeń z kontrolek i będą materiałem na kolejny artykuł. Karol Trybulec p-programowanie.pl 7