Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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 triedy Fragment 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:

Android fragmenty

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íklad onCreate(), 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:

Android fragmenty

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:
Android fragmenty

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:

Android fragmenty

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 pomenujeme FirstFragment. Tu máme obrázok s jeho požadovaným vzhľadom:
Android fragmenty

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:

Android fragmenty

V otvorenom okne zadáme názov nového súboru a potvrdíme tlačidlom OK:

Android fragmenty

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:
Android fragmenty

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:

Android fragmenty

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.


 

Všetky články v sekcii
Android fragmenty
Preskočiť článok
(neodporúčame)
Android fragmenty - Vytvorenie prvého fragmentu
Článok pre vás napísal Pavel
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v Javě, hlavně pro Android. Mezi jeho další zájmy patří Arduino, Minecraft.
Aktivity