IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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:

Android intent a aktivity

Otvorí sa okno New Android Activity:

Android intent a aktivity

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:

Android intent a aktivity

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.


 

Predchádzajúci článok
Android Intent a aktivity - Úvod a hlavné aktivita
Všetky články v sekcii
Android intent a aktivity
Preskočiť článok
(neodporúčame)
Android Intent a aktivity - SumActivity - Java kód
Č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