2. diel - Android Intent a aktivity - SumActivity - Súčet čísel
V minulej lekcii, Android Intent a aktivity - Úvod a hlavné aktivita , sme zahájili prácu na ukážkovej Android aplikáciu so šiestimi tlačidlami, ktorými sa prepíname medzi jednotlivými funkciami.
K otvoreniu iné aktivity potrebujeme Intent
(môžeme
preložiť ako zámer). V základnom Android
kurze je použitie Intent (v súvislosti s otváraním aktivít) len ľahko
spomenuté bez väčšieho vysvetlenia. Tu si ho vysvetlíme podrobnejšie.
Intent
Ide o objekt s informáciami pre systém, obsahujúci popis operácie
(zámeru), ktorá má byť vykonaná. Intent sú jedným z prostriedkov,
slúžiacich k medziprocesorovej komunikáciu, a neslúži iba na otváranie
aktivít. Ďalej môžeme Intent
použiť ako kontajner
primitívnych dát, čoho tiež využijeme.
Intent
je objekt skladajúci sa, v prípade otvárania aktivít,
z dvoch častí:
- akcie - Druh činnosti, ktorá má byť vykonaná (napr. zobrazenie webu).
- dáta - Dáta, ktoré potrebujeme aktivite alebo systému odovzdať (napr. URL webu).
Explicitné a implicitné intent
Existujú dva základné typy intent:
- Explicitné intent - presne určuje akciu (triedu), ktorá má byť spustená. Systému dáme úlohu, ktorý "bez premýšľania" vykoná. V hlavnej aktivite, opísané v predchádzajúcej lekcii, prvých päť tlačidiel otvára iné aktivity práve explicitným intent.
- Implicitné intent - určuje, čo sa má stať, ale už nehovorí, ako sa to má stať. Systému iba odovzdáme informácie, na základe ktorých rozhodne, ako náš zámer uskutoční. Príkladom môže byť posledný tlačidlo ITnetwork.cz (otvorenie webu) našej ukážkové aplikácie, kedy systému povieme, že chceme zobraziť web ITnetwork.cz. Intent nastavíme dáta v podobe URL ao viac sa nestaráme, pretože v práci bude pokračovať systém. Ten intent "prečíta" a zistí, že chceme zobraziť web s priloženou URL. Systém pokračuje hľadaním nainštalovaných aplikácií schopných tento zámer vykonať. Používateľovi ponúkne možnosť jednu z nich spustiť a tým náš zámer dokončiť.
Aktivita SumActivity
-
Súčet čísel
Teraz vytvoríme aktivitu SumActivity
, ktorú budeme otvárať z
hlavnej aktivity prvým tlačidlom. Tu budeme zadávať dve čísla určená k
súčtu. Výpočet môžeme urobiť priamo v aktivite SumActivity
,
ale aby sme si ukázali obojsmernú komunikáciu dvoch aktivít, bude
túto operáciu vykonávať ďalšie aktivita
SumResultActivity
, ktorá výsledok potom vráti späť do
aktivity SumActivity
.
Vytvorenie
súborov SumActivity.java
a sum_activity.xml
V Android Štúdiu, v okne so štruktúrou projektu, klikneme pravým tlačidlom myši na priečinok podľa nasledujúceho obrázku a v zobrazenom menu zvolíme New -> Activity -> Empty Activity:
Otvorí sa okno New Android Activity:
V otvorenom okne do poľa Activity Name napíšeme
SumActivity
, zaškrtneme políčko Generate Layout File a
do poľa Layout Name napíšeme sum_activity
. Potom okno
zavrieme tlačidlom Finish.
Android Studio vygeneruje súbory pre Java kód a druhý pre XML návrh grafického používateľského rozhrania.
sum_activity.xml
Súbor pre užívateľské rozhranie upravíme do nasledujúcej podoby:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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="@color/bg_activity_sum_activity" android:scrollbars="vertical"> <Button android:id="@+id/btnSend" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginTop="10dp" android:text="@string/activity_main_btn_sum_activity" android:textAllCaps="false" /> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/btnSend" android:background="@color/bg_activity_sum_activity" android:padding="10dp" android:scrollbars="vertical"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:scrollbars="vertical"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sum_activity_title" android:textColor="@color/text_color_activity_sum_activity" android:textSize="30sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="@string/sum_activity_desc" android:textColor="@color/text_color_activity_sum_activity" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:text="@string/sum_activity_number_1" android:textColor="@color/text_color_activity_sum_activity" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView2" /> <EditText android:id="@+id/etNumber1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:ems="10" android:inputType="number" android:textColor="@color/text_color_activity_sum_activity" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView3" /> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:text="@string/sum_activity_number_2" android:textColor="@color/text_color_activity_sum_activity" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/etNumber1" /> <EditText android:id="@+id/etNumber2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:ems="10" android:inputType="number" android:textColor="@color/text_color_activity_sum_activity" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView4" /> <TextView android:id="@+id/textView5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:text="@string/sum_activity_result" android:textColor="@color/text_color_activity_sum_activity" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/etNumber2" /> <TextView android:id="@+id/labelResult" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:gravity="center_horizontal" android:text="0" android:textColor="@color/text_color_activity_sum_activity" android:textSize="30sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView5" /> </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView> </RelativeLayout>
Na začiatku obrazovky máme tlačidlo pre návrat do menu a nadpis aktivity.
Nižšie potom máme niekoľko <TextView>
s informáciami pre
užívateľov a komponenty <EditText>
pre zadanie čísel na
sčítanie. Nakoniec zobrazujeme výsledok a tlačidlo na odoslanie k výpočtu.
Nič zložité.
Konštanty použitých textov
Súbor res/values/strings.xml
doplníme o nasledujúce položky
s textami použitými v projekte:
<string name="sum_activity_title">SumActivity</string> <string name="sum_activity_desc">Oboustranná komunikace dvou aktivit. Tato aktivita od uživatele získá dvě čísla, která tlačítkem odešleme do jiné aktivity, kde tato čísla budou sečtena a výsledek bude vrácen do této aktivity.</string> <string name="sum_activity_number_1">První číslo:</string> <string name="sum_activity_number_2">Druhé číslo:</string> <string name="sum_activity_result">Výsledek výpočtu:</string> <string name="suma_ctivity_button">Odeslat k výpočtu</string> <string name="info_no_result">Nepřišel žádný výsledek...</string> <string name="info_error_loading_result">Chyba načítání výsledku...</string> <string name="info_incorrect_entry">Chybné zadání...</string> <string name="incoming_intent_data_error">Chyba přijatých dat...</string>
Konštanty použitých farieb
Podobne doplníme súbor res/values/colors.xml
o dve položky s
farbou pozadia aktivity as farbou textu:
<color name="bg_activity_sum_activity">#AE3128</color> <color name="text_color_activity_sum_activity">#EEEEEE</color>
Výstup XML kódu bude vyzerať takto:
Je tu jedna odlišnosť od hlavnej aktivity - tlačidlo nemá v XML atribút
android:onClick
pre obslúženie udalosti kliknutia. Túto udalosť
obslúžime totiž priamo v kóde v súbore SumActivity.java
, aby
sme si vyskúšali ďalší spôsob obslúženie udalosti kliknutia.
V budúcej lekcii, Android Intent a aktivity - SumActivity - Java kód , si použitie intent ukážeme na prvý ukážke z
našej ukážkové aplikácie Activities
.