Aktivity, Intent, Fragment
Activity
Aktivita predstavuje prezenčnú vrstvu aplikácie. Jedna aktivita reprezentuje jednu obrazovku aplikácie (napr. hlavné menu, prihlasovacia obrazovka, registračný formulár – obrazovka, atď.). V každom projekte musí byť jedna aktivita v android manifeste označená za hlavnú aktivitu. Táto aktivita sa spustí ako prvá pri spustení aplikácie. Aktivity sa ukladajú do java adresára v projekte. Životný cyklus aktivity je popípsaný v časti Architektúra à Životný cyklus aktivity.
Pridanie activity
Okrem hlavnej activity, ktorá sa vytvorí pri založení nového projektu (viď “Vytvorenie nového projektu”) môžeme vytvoriť ďalšie activity:
- pravým kliknutím myšky na adresár java NewàActivity a následne si vybrať šablónu activity, ktorú chceme použiť
- vytvorením novej Java triedy a následne pridať dedenie z konkrétnej activity (napr. extends AppCombarActivity). Nesmieme zabudnúť pridať metódu onCreate() s nastavením XML súboru pre vzhľad aplikácie (res-->layout)
Rozbor activity
Najjednoduchšia aktivita, ktorú môžeme vytvoriť je EmptyActivity. Táto šablóna obsahuje iba prázdnu aktivitu, ktorá môže a nemusí mať panel akcií ActionBar. Dialógové okno vytvárania novej aktivity obsahuje nasledujúce časti:
- Activity Name – názov našej aktivity.
- Zaškrtávacie tlačidlo Generate Layout File – ak túto možnosť zaškrtneme, tak Android Studio vytvorí automaticky aj súbor so vzhľadom.
- Layout Name – ak sme zaškrtli možnosť na vygenerovanie súboru so vzhľadom, môžeme zmeniť názov tohto súboru.
- Zaškrtávacie tlačidlo Launcher Activity – ak zaškrtneme túto možnosť, tak sa pridá aktivita do android manifestu. Do manifestu sa pridá nasledujúci kód, ktorý však obsahuje aj intent-filter, ktorý umožňuje nastaviť takúto aktivitu ako hlavnú aktivitu našej aplikácie (v časti Run --> Edit Configurations môžeme prepínať, ktorá aktivita bude hlavná- teda sa spustí ako prvá):
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Ak necháme toto tlačidlo nezaškrtnuté, aktivita sa pridá do manifestu, ale nebude obsahovať intent-filter, ktorý umožňuje nastaviť túto aktivitu ako hlavnú.
- Zaškrtávacie tlačidlo Backwards Compatibility (AppCombat) – ak odškrtneme túto možnosť, tak sa vytvorí aktivita bez panela akcií ActionBar. Vytvorená aktivita bude dediť z hlavnej triedy Activity. Ak necháme túto možnosť zaškrtnutú, naša aplikácia bude obsahovať panel akcií ActionBar a aktivita bude dediť z triedy AppCombatActivity.
- Package name – určíme do ktorého balíčka sa vloží naša aktivita.
V dialógovom okne pre vytvorenie novej EmptyActivity nazveme našu aplikáciu MojaAktivita, zaškrtneme možnosť vygenerovať súbor so vzhľadom, názov tohto súboru necháme nezmenený, odškrtneme možnosti pre pridanie aktivity do manifestu a odškrtneme aj použitie panela akcií ActionBar, tak dostaneme nasledujúci kód:
import android.os.Bundle;
import android.app.Activity;
public class MojaAktivita extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_moja_aktivita);
}
}
Na začiatku sú naimportované triedy, ktoré používame v našej aktivite. Nesmieme zabudnúť naimportovať všetky triedy, na ktoré sa odkazujeme. Aktivita bude dediť z triedy Activity. Táto trieda predstavuje základnú triedu pre všetky aktivity.
Pri spustení aplikácie je volaná metóda onCreate(), ktorá sa volá vždy pri vytvorení activity, ak bola aktivita prekrytá inou aktivitou a používateľ sa vrátil späť, ak bola vynútená zmena zdrojov (otočenie telefónu, pripojenie HW klávesnice, zmena jazyka, atď.)
Metóda setContentView() nastavuje vzhľad aplikácie zo súboru v adresáry res/layout.
Všetky vytvorené aktivity v projekte musia byť pridané do android manifestu!!!
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MojaAktivita2"></activity>
</application>