Android od podstaw: aktywności i fragmenty
Polish (Polski) translation by Mateusz Kurlit (you can also view the original English article)
Kiedy użytkownik korzysta z aplikacji na urządzeniu z Androidem, prawie zawsze robi to za pomocą Activity
, pojedynczego ekranu urządzenia. Po tym jak Google wydał Androida w wersji Honeycomb, do systemu operacyjnego zostały dodane obiekty Fragment
, aby umożliwić łatwiejsze wykorzystanie kodu i zmianę zawartości na ekranie bez potrzeby budowania nowej Activity
za każdym razem.
W tym poradniku dowiesz się więcej o obiektach Activity
i Fragment
w systemie Android, ich cyklach życia oraz kiedy i jak powinno się ich używać w aplikacjach.
1. Aktywności
Aktywności są kluczową częścią ekosystemu Android i jednym z pierwszych pojęć, które trzeba pojąć w miarę zapoznawania się z rozwojem Androida. Aktywności działają jak pojedynczy ekran, który jest wyświetlony użytkownikowi i często wypełniony wieloma elementami programu.
Kiedy utworzysz klasę Activity
, ręcznie lub poprzez szablony Android Studio, musisz określić ją w pliku AndroidManifest.xml, jeśli jeszcze nie została dodana:
1 |
<activity android:name=".MainActivity"> |
2 |
<intent-filter>
|
3 |
<action android:name="android.intent.action.MAIN" /> |
4 |
|
5 |
<category android:name="android.intent.category.LAUNCHER" /> |
6 |
</intent-filter>
|
7 |
</activity>
|
W powyższym fragmencie, zwróć uwagę na tag intent-filter
z elementem action
i category
. Chociaż omówienie tych elementów wychodzi poza zakres tego poradnika, powinieneś wiedzieć, że te dodatkowe wiersze przekazują systemowi, którą Activity
otworzyć najpierw, gdy użytkownik uruchomi aplikację.
Po utworzeniu Activity
, prawdopodobnie chcesz powiązać ją z plikiem XML układu, aby można było łatwo użyć obiektów widoku z układu. Możesz wykonać to za pomocą metody onCreate()
.
1 |
@Override
|
2 |
protected void onCreate(Bundle savedInstanceState) { |
3 |
super.onCreate(savedInstanceState); |
4 |
setContentView(R.layout.activity_main); |
5 |
}
|
Po wezwaniu setContentView()
, możesz rozpocząć odwoływanie obiektów View
z pliku XML układu.
Cykl życia aktywności
W tym momencie, prawdopodobnie zastanawiasz się czym jest onCreate()
i dlaczego z niej korzystamy. Metoda onCreate()
jest jedną z metod powiązanych z cyklem życia Activity
. Zostaje wezwana, gdy Activity
jest tworzona po raz pierwszy. To tutaj możesz wykonać kilka ogólnych kroków inicjujących w obrębie swojej Activity
, ponieważ z pewnością zostanie ona wezwana na początku cyklu życia Activity
jak widać poniżej.



Powyższy schemat pokazuje kolejność metod wzywanych, gdy Activity
opuszcza lub wchodzi w różne możliwe stany:
-
onCreate()
jest wzywany bezpośrednio po utworzeniuActivity
jak sama nazwa wskazuje.onDestroy()
odnosi się do odwrotnej operacji i jest wzywana podczas usuwaniaActivity
z pamięci urządzenia. Istnieje kilka przypadków, gdzieonDestroy()
nie może być wezwana, ale te wychodzą poza zakres tego poradnika. -
onStart()
jest wzywana, gdyActivity
jest widoczna dla użytkownika, aonStop()
jest wzywana, kiedyActivity
nie jest już widoczna. Obie mogą być wezwane, gdy aplikacja zostanie umieszczona w tle za pomocą przycisku home i kiedy aplikacja zostanie przywrócona na pierwszy plan. -
onResume()
ionPause()
są powiązane zActivity
będącą na pierwszym planie. Jeśli inny komponent taki jak komunikat lub innaActivity
wejdzie na pierwszy plan, ten fragment cyklu zostanie wezwany.
Zrozumienie tego, kiedy każda z tych metod jest wzywana, zaoszczędzi ci wiele bólów głowy podczas tworzenia i potrzeby burzenia/relokacji zasobów w aplikacji.
Radzenie sobie ze zmianami w konfiguracji
Po zapoznaniu się z cyklem życia Activity
, nadszedł czas, aby dowiedzieć się co się stanie, gdy Activity
jest niszczone i tworzone ponownie przez system. To może się zdarzyć w kilku sytuacjach, najczęściej, gdy ekran jest obracany.
Activity
przechodzi przez standardowy proces burzenia onStop()
, onPause()
, onDestroy()
, a następnie onCreate()
, gdy nowy przykład Activity
jest tworzony.
Inną metodą niepokazaną na powyższym diagramie jest onSaveInstanceState()
. Ta metoda jest wzywana, gdy Activity
jest niszczone i pozwala na zapisanie prostych informacji w obrębie pakietu. Kiedy onCreate()
jest wzywane ponownie, możesz wypakować informacje, które zapisałeś wcześniej. To samo można wykonać metodą onRestoreInstanceState()
.
2. Fragmenty
Wprowadzone w Android 3.0 (Honeycomb), obiekty Fragment
są świetnym narzędziem, które przydaje się w wielu problematycznych sytuacjach, w których tylko klasy Activity
były dostępne. Fragmenty pozwalają na organizowanie komponentów interfejsu projektu dla różnych urządzeń, dając możliwość wyświetlania wielu segmentów interfejsu na dużym ekranie, np. na tablecie lub wyświetlać jeden i połączyć wszystkie ze sobą na mniejszym ekranie.
Pomagają również podzielić kod na łatwe do zarządzania kawałki, bez potrzeby polegania na dużych i skomplikowanych klasach Activity
. Jedną z ostatnich i prawdopodobnie najbardziej wartościową funkcją jest to, że fragmenty pozwalają na łatwe poruszanie się w aplikacji i umożliwiają proste komunikowanie się między różnymi sekcjami aplikacji.
Cykl życia
Tak jak klasa Activity
, klasa Fragment
posiada własny cykl życia, który zarządza Fragment
od czasu przyłączenia do Activity
, aż do jego zniszczenia. Zrozumienie tego cyklu życia pomoże ci stworzyć aplikacje, które są stabilne i wolne od błędów.



-
onAttach()
ionDetach()
sygnalizuje, kiedy fragment został dodany doActivity
i nadaje się do użytku w aplikacji. -
onCreate()
jest wzywana jako inicjująca metoda dla klasFragment
, aonDestroy()
jest odpowiednikiem metody odwrotnej. -
onCreateView()
jest metodą, w której tworzysz układ i obiektyView
dla fragmentu.onDestroyView()
jest wzywana, kiedy hierarchia widoku powiązana z fragmentem jest usuwana. -
onStart()
ionStop()
działają podobnie do odpowiedników cyklu życia ichActivity
. Te metody są włączane, kiedyFragment
odpowiednio staje się lub przestaje być widoczny. -
onPause()
ionStart()
są również podobne do odpowiednikówActivity
. KiedyFragment
jest widoczny, ale jego koncentracja się zmieniła, wywołuje się jedną z tych dwóch metod.
Podklasy fragmentów
Chociaż klasa Fragment
jest przydatna na swój sposób, nie może osiągnąć pełnego potencjału bez rozszerzenia w celu spełnienia celu aplikacji. Na szczęście, Google dostarczyło wiele różnych podrzędnych klas Fragment
, aby pomóc deweloperom szybko zbudować świetne aplikacji.
W tej sekcji, chcę wyróżnić niektóre z nich, aby zmotywować cię do zbudowania własnych klas Fragment
. Warto zwrócić uwagę, że wymienione fragmenty są dla ciebie dostępne, więc nie odkrywasz koła na nowo.
ListFragment
Ten Fragment
posiada wbudowany ListView
i kilka pomocniczych metod, takich jak nieokreślony ProgressBar
(okrągły, kręcący się widżet wczytywania) i TextView
do wyświetlania tekstu, kiedy List
jest pusty.
MapFragment
Ten bezcenny Fragment
, który owija MapView
w celu zastosowania z usługą Mapy Google. Zamiast konieczności napisania własnego kodu, możesz rozszerzyć ten Fragment
, aby uzyskać podstawową funkcjonalność mapy w swojej aplikacji.
BrowseFragment
i DetailsFragment
Obie te klasy Fragment
są dostępne jako część bibliotek wsparcia Leanback dla Android TV i obsługują interfejs użytkownika i podstawową funkcjonalność przy tworzeniu aplikacji dla telewizorów.
Podsumowanie
Chociaż ten poradnik ledwie poruszył kwestie działania klas Activity
i Fragment
, powinieneś teraz wiedzieć, że są one kluczowymi komponentami przy budowaniu interfejsu użytkownika twojej aplikacji. Poznałeś cykl życia aktywności i fragmentów, przejrzałeś kilka przydatnych podklas Fragment
, które mogą pomóc zbudować wspaniałe aplikacji.
Kontynuując pracę z systemem Android, dowiesz się o wielu innych klasach Activity
i Fragment
, które są dostępne dla ciebie oraz bez wątpienia zbudujesz własne.