1. diel - Android fragmenty - Úvod
V dnešnom Android tutoriále si povieme čo je to fragment. Založíme si projekt a rovno jeden fragment vytvoríme.
Čo je to fragment
Fragment je definovaný triedou odvodenou od triedyFragment
a XML návrhom svojho vzhľadu. Fragment
má mnoho spoločného s aktivitou. Vzhľad fragmentu vytvárame XML návrhom,
ktorý potom prepájame s kódom jeho Java triedy.
Vizuálne je možné fragment popísať ako priestor v GUI aktivity pre zobrazenie iného ľubovoľného XML návrhu. Každý zobrazený fragment je vždy súčasťou aktivity.
Výhody použitia fragmentov
Fragmentom môžeme plnohodnotne nahradiť zobrazenie inej aktivity. Použitie fragmentov ponúka široké možnosti na definovanie vlastných animácií pri svojom zobrazovaní alebo zatváraní. Fragmentom môžeme vyplniť obsah celej aktivity alebo len jej časť.Fragmentu môžeme nastaviť ľubovoľné rozmery a môžeme mu určiť konkrétnu pozíciu v aktivite, podobne ako akékoľvek komponenty GUI. Dokonca môžeme mať v aktivite umiestnených viac fragmentov. Väčším počtom fragmentov napríklad ľahko docielime rozdelenie obsahu aktivity do niekoľkých samostatných častí. Týmto spôsobom môžeme prispôsobovať vzhľad a rozloženie aplikácie veľkosti a aktuálnu orientáciu displeja:
Obrázok zobrazuje dva fragmenty v rôznych konfiguráciách jednej aktivity na rôznych veľkostiach displeja. Na veľkom displeji je dostatok miesta na zobrazenie oboch fragmentov. Na zariadení s malým displejom je v jednom okamihu zobrazený iba jeden fragment.
Fragmenty vzájomne nahrádzame pomocou navigácie zo strany užívateľa.
Životný cyklus fragmentu
Aj napriek tomu, že fragment patrí aktivite, má vlastný životný cyklus prijímajúci vlastné vstupné udalosti. Životný cyklus fragmentu sa podobá životnému cyklu aktivity, a tiež obsahuje niektoré rovnaké metódy spätného volania, ako napríkladonCreate()
,
onStart()
, onPause()
, onStop()
. A
pretože je fragment súčasťou aktivity, je jeho životný cyklus od tejto
aktivity úplne závislý.
Životný cyklus fragmentu môže prebiehať iba v prípade, že je aktivita aktívna.
Životný cyklus fragmentu je nasledujúci:
Fragment je vždy súčasťou aktivity. V aktivite môže byť fragment umiestnený napevno pri vytváraní GUI aplikácie v XML kóde alebo môže byť do aktivity pridaný až za behu aplikácie do vopred pripraveného kontajnera (layoutu).
Spôsob umiestnenia fragmentu do aktivity
Existujú dva spôsoby, ako v aktivite fragment zobraziť. Ak má byť fragment umiestnený nemenne, rovnako ako akýkoľvek komponent, stačí ho definovať v XML návrhu GUI aktivity, v ktorej bude umiestnený. Pokiaľ budeme chcieť fragment zobrazovať (nahradzovať inými fragmentmi) až za behu aplikácie, budeme ho vytvárať a umiestňovať do aktivity programovo v Java kóde.Pevne umiestnený fragment
Tu máme príklad deklarácie pevne umiestneného fragmentu priamo v XML rozvrhnutí GUI aktivity:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="1"> <fragment android:name="FragmentA" android:id="@+id/fragment_a" android:layout_weight="0.5" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="FragmentB" android:id="@+id/fragment_b" android:layout_weight="0.5" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
Uvedený príklad XML kódu vytvára LinearLayout
s
horizontálnym usporiadaním av ňom dva rôzne
fragmenty vedľa seba. Takto vytvorené fragmenty sú neoddeliteľnou
súčasťou aktivity a nemožno ich z aktivity odstrániť alebo ich nahradiť
inými fragmentmi.
Tento spôsob sme si predstavili len pre úplnosť a nebudeme sa ním ďalej podrobnejšie zaoberať. Ďalej sa budeme sústrediť len na prácu s fragmentmi počas behu aplikácie.
Umiestnenie fragmentu za behu aplikácie
Týmto spôsobom práce s fragmentmi sa budeme zaoberať v nasledujúcich lekciách tohto kurzu. Výkladom nás bude samozrejme sprevádzať ukážkový projekt jednoduchej aplikácie, na ktorej si všetko popísané vyskúšame.Vytvorenie ukážkového projektu
Náš ukážkový projekt bude pre prehľadnosť obsahovať niekoľko aktivít. Každá aktivita sa bude týkať konkrétnej ukážky práce s fragmentmi. V Android Studiu teda vytvoríme nový projekt Fragments:Do políčka Name napíšeme Fragments
, do políčka
Package name napíšeme cz.itnetwork.fragments
. Ako
programovací jazyk zvolíme Javu. Nastavenie potvrdíme tlačidlom
Finish:
V zobrazenom vývojovom prostredí budeme mať vygenerované súbory
MainActivity.java
a activity_main.xml
. Tieto súbory
si zatiaľ všímať nebudeme. Najskôr vytvoríme náš prvý fragment.
Vytvorenie prvého fragmentu
Náš prvý fragment pomenujemeFirstFragment
. Tu máme obrázok s
jeho požadovaným vzhľadom:
Pohľadom na uvedený obrázok nemožno rozoznať, či ide o bežnú aktivitu alebo o fragment v aktivite umiestnený. Fragment so žltým pozadím zaberá celý dostupný priestor svojej materskej aktivity. V skutočnosti vypĺňa priestor už spomínaného kontajnera (layoutu), ktorý má parametre nastavené tak, aby bol v aktivite maximálne roztiahnutý.
Práca na novom fragmente sa skladá z dvoch častí:
- XML kód s návrhom GUI fragmentu
- Java kód fragmentu
XML kód fragmentu
FirstFragment
Spôsob vytvorenia XML návrhu fragmentu sa nijako nelíši od
vytvárania XML návrhu aktivity. Dokonca nám nič nebráni v
použití XML návrhu fragmentu ako XML návrh aktivity a naopak. Súbory s XML
návrhmi fragmentov umiestňujeme v štruktúre projektu do zložky
res/layout/
. Teda na rovnaké miesto ako XML návrhy aktivít.
Vytvoríme teda nový XML súbor:
V otvorenom okne zadáme názov nového súboru a potvrdíme tlačidlom OK:
Vytvorený XML súbor upravíme tak, aby obsahoval nasledujúci kód:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFF9DA"> <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="0dp" android:gravity="center_horizontal|center_vertical" android:text="Náš první fragment" android:textColor="@color/black" android:textSize="34sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Náš prvý fragment má žlté pozadie a obsahuje iba jeden
element <TextView>
.
Java kód fragmentu
FirstFragment
V štruktúre projektu klikneme pravým tlačidlom myši na zložku so súbormi
s Java kódom. V zobrazenom menu, cez položku New, klikneme na
Java Class:
V otvorenom okne vyplníme názov vytváranej triedy FirstFragment. Ďalej skontrolujeme, že je vybraná voľba Class a potvrdíme klávesom Enter:
Bude vytvorený nový súbor s názvom FirstFragment.java
.
Súbor upravíme nasledovne:
public class FirstFragment extends Fragment { TextView label; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.first_fragment, container, false); label = view.findViewById(R.id.textView); label.setText("Toto je náš prvý fragment!"); return view; } }
V hlavičke triedy máme zápis extends Fragment
. Týmto je
dané, že je naša trieda odvodená od triedy Fragment
. Ďalej
deklarujeme premennú label
typu TextView
na uloženie
referencie na element <TextView
v XML návrhu fragmentu.
Nasleduje prepísanie metódy onCreateView()
, čo je metóda
životného cyklu fragmentu. Táto metóda slúži na vytvorenie GUI
fragmentu. Tu pomocou triedy LayoutInflater
, vytvoríme
objekt typu View
, tvoriaci Java reprezentáciu XML návrhu
fragmentu. Z tohto View
teraz získavame referencie na
jednotlivé komponenty fragmentu. V našom prípade ide o jeden
TextView
, ktorému vzápätí nastavujeme požadovaný text.
V nasledujúcej lekcii, Android fragmenty - Vytvorenie prvého fragmentu , vytvoríme novú aktivitu, v ktorej
zobrazíme náš prvý fragment FirstFragment
.