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 AlertDialog - Defaultné tlačidlá

V minulej časti, Android AlertDialog - Základné systémové dialógové okno , sme si predstavili dialógové okná a založili nový projekt ukážkovej aplikácie. Tiež sme vytvorili naše prvé jednoduché dialógové okno.

V dnešnom Androiod tutoriále budeme pokračovať v popise dialógového okna typu AlertDialog. Našou dnešnou úlohou bude pridanie a nastavenie systémových tlačidiel do nášho prvého dialógového okna, ktoré sme predtým vytvorili.

Pridanie tlačidiel systémovému oknu

Náš AlertDialog, ktorý máme z minulosti rozpracovaný, dnes doplníme tlačidlami. AlertDialog môže byť buď úplne bez tlačidiel, ako sme si predtým ukázali, alebo môže obsahovať až tri defaultné tlačidlá. Android tieto tri tlačidlá pomenováva ako pozitívne tlačidlo, negatívne tlačidlo a neutrálne tlačidlo. Každému z tlačidiel zvlášť nastavujeme jeho text a definujeme obslužný kód udalosti kliknutia. Po stlačení ktoréhokoľvek tlačidla je dialóg automaticky zatvorený.

Vzhľad základných tlačidiel nemôžeme, okrem jeho textu, nijako ovplyvniť. Je totiž určený konkrétnou verziou systému Android na konkrétnom zariadení, na ktorom aplikácia práve beží. Možnosti vytvárania vlastných tlačidiel si ukážeme až neskôr.

Pre pridanie spomínaných tlačidiel doplníme našu metódu showMyAlert():

public void showMyAlert() {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

    // Nastavení textu titulku
    alertDialogBuilder.setTitle("Titulok");

    // Nastavení textu obsahu
    alertDialogBuilder.setMessage("Máte veľký hlad?");

    // Nastavení tlačítek
    alertDialogBuilder.setPositiveButton("Áno", null);
    alertDialogBuilder.setNegativeButton("Nie", null);
    alertDialogBuilder.setNeutralButton("Zavrieť", null);

    // Vytvoření a zobrazení dialogového okna
    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
}

Metóda showMyAlert() teraz bude zobrazovať dialóg s tromi tlačidlami, vďaka ktorým bude mať užívateľ tri možnosti reakcie na zobrazenú informáciu. Tými možnosťami sú voľby Áno, Nie a Zavrieť. Všetky tri metódy setPositiveButton(), setNegativeButton() a setNeutralButton() prijímajú dva parametre. Do prvého parametra zadávame textový reťazec s textom tlačidla. Do druhého parametra zadávame referenciu na poslucháčov udalosti kliknutí. My zatiaľ žiadneho poslucháča nedefinujeme, preto tu dosadzujeme hodnotu null.

Aj napriek tomu, že nie je definovaný poslucháč udalosti kliknutia, bude AlertDialog po stlačení ktoréhokoľvek tlačidla zatvorený.

Po spustení našej ukážkovej aplikácie a po zobrazení nášho dialógového okna uvidíme výsledok úpravy:

defaultný dialóg s tlačidlami - Dialógové okná v Androide

Udalosti spôsobené reakciou používateľa

Teraz si popíšeme, ako môžeme v Java kóde spracovať reakciu užívateľa na zobrazenom dialógu. Po zobrazení dialógového okna aplikácia čaká na reakciu užívateľa, ktorý môže vyvolať udalosť:

  • obsluhou jedného z jeho tlačidiel,
  • výberom zo zoznamu preddefinovaných možností alebo
  • zatvorením dialógu inak ako jeho tlačidlom.
Výber zo zoznamu preddefinovaných možností si ukážeme neskôr v samostatnom príklade. Dnes sa budeme sústrediť iba na tlačidlá dialógového okna.

Obsluha tlačidiel

Na ošetrenie udalosti kliknutia na tlačidlá dialógového okna užívateľom potrebujeme vytvoriť poslucháča, ktorý na stlačenie tlačidla zareaguje vykonaním nejakého kódu. Tohto poslucháča dosadzujeme do druhého parametra metód setPositiveButton(), setNegativeButton() a setNeutralButton(). Poslucháčov deklarujeme priamo v parametri inline zápisom anonymnou triedou alebo dosadením referencie na skôr vytvoreného poslucháča.

Vytvorenie poslucháča inline zápisom

Prvý spôsob je pohodlnejší, pretože nám jeho deklaráciu vývojové prostredie Android Studio vygeneruje samo po využití ponuky našepkávača:

našepkávač Android Štúdia - Dialógové okná v Androide

Vyššie uvedený obrázok zobrazuje zapísanie kľúčového slovo new do parametra určeného pre poslucháčov, na čo Android Studio zareaguje zobrazením ponuky na vygenerovanie potrebného Java kódu. Takto budeme postupovať pri všetkých troch metódach pre nastavenie tlačidiel, pokiaľ nezískame tento kód:

alertDialogBuilder.setPositiveButton("Áno", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int which) {
        // Obslužný kód
    }
});

alertDialogBuilder.setNegativeButton("Nie", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int which) {
        // Obslužný kód
    }
});

alertDialogBuilder.setNeutralButton("Zavrieť", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int which) {
        // Obslužný kód
    }
});

Vo všetkých troch prípadoch je prepísaná metóda onClick() rozhrania DialogInterface.OnClickListener. Pokiaľ bude prepísaná metóda onClick() obsahovať nejaký kód, bude po stlačení daného tlačidla vykonaný. Okrem toho spôsobí stlačenie ktoréhokoľvek z týchto tlačidiel automatické zatvorenie dialógového okna.

Deklarácia univerzálneho poslucháča pre viac tlačidiel

Deklaráciou univerzálneho poslucháča vytvoríme inštanciu rozhrania DialogInterface.OnClickListener, ktorú dosadíme do druhého parametra metód setPositiveButton(), setNegativeButton() a setNeutralButton(). Deklaráciu takého poslucháča si pridáme do úvodu triedy MainActivity pod našou premennou btn_01:

DialogInterface.OnClickListener dialogBtnClickListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int which) {
        switch (which) {
            case DialogInterface.BUTTON_POSITIVE:
                // Obslužný kód
                break;
            case DialogInterface.BUTTON_NEGATIVE:
                // Obslužný kód
                break;
            case DialogInterface.BUTTON_NEUTRAL:
                // Obslužný kód
                break;
        }
    }
};

Prepísanú metódu onClick() rozhrania DialogInterface.OnClickListener sme doplnili konštrukciou switch, kde rozlišujeme, aké tlačidlo bolo stlačené. Každé tlačidlo nášho dialógu pri svojom stlačení vracia hodnotu typu int, ktorú získame v parametri which prepísané metódy onClick(). Táto hodnota slúži na identifikáciu stlačeného tlačidla a môže nadobúdať hodnoty jednej z týchto troch systémových konštánt:

  • DialogInterface.BUTTON_POSITIVE: -1,
  • DialogInterface.BUTTON_NEGATIVE: -2,
  • DialogInterface.BUTTON_NEUTRAL: -3.
Podľa konkrétnej hodnoty parametra which môžeme určiť ďalšie správanie aplikácie. Novovytvoreným poslucháčom dialogBtnClickListener teraz môžeme nahradiť inline zápisy anonymnou triedou na mieste druhého parametra metód setPositiveButton(), setNegativeButton() a setNeutralButton():
alertDialogBuilder.setPositiveButton("Áno", dialogBtnClickListener);

alertDialogBuilder.setNegativeButton("Nie", dialogBtnClickListener);

alertDialogBuilder.setNeutralButton("Zavrieť", dialogBtnClickListener);

Zrušenie dialógového okna

V predchádzajúcom texte sme si popísali obsluhu udalosti kliknutí na tlačidlo. Ďalej máme možnosť odchytiť udalosť zrušenia dialógového okna. Užívateľ môže dialógové okno zrušiť dvoma spôsobmi:

  • kliknutím na tlačidlo Späť na svojom zariadení alebo
  • kliknutím kamkoľvek mimo zobrazeného dialógu.
Ak chceme reagovať na udalosť zrušenia, doplníme AlertDialog pri jeho vytváraní prepisom metódy onCancel():
alertDialogBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        // Obslužný kód
    }
});

Môžeme tiež možnosť takto zrušiť AlertDialog užívateľovi zakázať. V takom prípade by sme použili metódu setCancelable(false).

V prípade zakázania možnosti zrušenia dialógového okna je nutné zaistiť inú možnosť jeho zatvorenia. Napríklad pomocou zobrazeného tlačidla alebo výberom položky z ponúknutého zoznamu. Inak používateľ nebude mať možnosť takéto dialógové okno zavrieť.

Pod článkom máme k dispozícii na stiahnutie archív s aktualizovaným projektom našej ukážkovej aplikácie.

V budúcej časti, Android AlertDialog - Ikona v hlavičke , si do hlavičky nášho dialógového okna pridáme ikonu z ponuky Asset Studia, ktorá je súčasťou Android Studia. Tiež si ukážeme možnosť zatvárania dialógového okna pomocou metódy dismiss() priamo z Java kódu.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 4x (22.96 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Android AlertDialog - Základné systémové dialógové okno
Všetky články v sekcii
Dialógové okná v Androide
Preskočiť článok
(neodporúčame)
Android AlertDialog - Ikona v hlavičke
Č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