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:
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.
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:
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.
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.
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