Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - Android AlertDialog - Defaultní tlačítka

V minulé části, Android AlertDialog - Základní systémové dialogové okno, jsme si představili dialogová okna a založili nový projekt ukázkové aplikace. Také jsme vytvořili naše první jednoduché dialogové okno.

V dnešním Androiod tutoriálu budeme pokračovat v popisu dialogového okna typu AlertDialog. Naším dnešním úkolem bude přidání a nastavení systémových tlačítek do našeho prvního dialogového okna, které jsme dříve vytvořili.

Přidání tlačítek systémovému oknu

Náš AlertDialog, který máme z dřívějška rozpracovaný, dnes doplníme tlačítky. AlertDialog může být buď úplně bez tlačítek, jak jsme si dříve ukázali, nebo může obsahovat až tři defaultní tlačítka. Android tato tři tlačítka pojmenovává jako pozitivní tlačítko, negativní tlačítko a neutrální tlačítko. Každému z tlačítek zvlášť nastavujeme jeho text a definujeme obslužný kód události kliknutí. Po stisknutí kteréhokoliv tlačítka je dialog automaticky zavřen.

Vzhled základních tlačítek nemůžeme, kromě jeho textu, nijak ovlivnit. Je totiž určen konkrétní verzí systému Android na konkrétním zařízení, na kterém aplikace právě běží. Možnosti vytváření vlastních tlačítek si ukážeme až později.

Pro přidání zmíněných tlačítek doplníme naší metodu showMyAlert():

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

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

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

    // Nastavení tlačítek
    alertDialogBuilder.setPositiveButton("Ano", null);
    alertDialogBuilder.setNegativeButton("Ne", null);
    alertDialogBuilder.setNeutralButton("Zavřít", null);

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

Metoda showMyAlert() nyní bude zobrazovat dialog se třemi tlačítky, díky kterým bude mít uživatel tři možnosti reakce na zobrazenou informaci. Těmi možnostmi jsou volby Ano, Ne a Zavřít. Všechny tři metody setPositiveButton(), setNegativeButton() a setNeutralButton() přijímají dva parametry. Do prvního parametru zadáváme textový řetězec s textem tlačítka. Do druhého parametru zadáváme referenci na posluchače události kliknutí. My zatím žádného posluchače nedefinujeme, proto zde dosazujeme hodnotu null.

I přes to, že není definován posluchač události kliknutí, bude AlertDialog po stisknutí kteréhokoliv tlačítka zavřen.

Po spuštění naší ukázkové aplikace a po zobrazení našeho dialogového okna uvidíme výsledek úpravy:

defaultní dialog s tlačítky - Dialogová okna v Androidu

Události způsobené reakcí uživatele

Nyní si popíšeme, jak můžeme v Java kódu zpracovat reakci uživatele na zobrazeném dialogu. Po zobrazení dialogového okna aplikace čeká na reakci uživatele, který může vyvolat událost:

  • obsluhou jednoho z jeho tlačítek,
  • výběrem ze seznamu předdefinovaných možností nebo
  • zavřením dialogu jinak než jeho tlačítkem.

Výběr ze seznamu předdefinovaných možností si ukážeme později v samostatném příkladu. Dnes se budeme soustředit pouze na tlačítka dialogového okna.

Obsluha tlačítek

Pro ošetření události kliknutí na tlačítka dialogového okna uživatelem potřebujeme vytvořit posluchače, který na stisk tlačítka zareaguje provedením nějakého kódu. Tohoto posluchače dosazujeme do druhého parametru metod setPositiveButton(), setNegativeButton() a setNeutralButton(). Posluchače deklarujeme přímo v parametru inline zápisem anonymní třídou nebo dosazením reference na dříve vytvořeného posluchače.

Vytvoření posluchače inline zápisem

První způsob je pohodlnější, protože nám jeho deklaraci vývojové prostředí Android Studio vygeneruje samo po využití nabídky našeptávače:

našeptávač Android Studia - Dialogová okna v Androidu

Výše uvedený obrázek zobrazuje zapsání klíčového slovo new do parametru určeného pro posluchače, na což Android Studio zareaguje zobrazením nabídky k vygenerování potřebného Java kódu. Takto budeme postupovat u všech tří metod pro nastavení tlačítek, dokud nezískáme tento kód:

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

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

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

Ve všech třech případech je přepsána metoda onClick() rozhraní DialogInterface.OnClickListener. Pokud bude přepsaná metoda onClick() obsahovat nějaký kód, bude po stisknutí daného tlačítka proveden. Kromě toho způsobí stisknutí kteréhokoliv z těchto tlačítek automatické zavření dialogového okna .

Deklarace univerzálního posluchače pro více tlačítek

Deklarací univerzálního posluchače vytvoříme instanci rozhraní DialogInterface.OnClickListener, kterou dosadíme do druhého parametru metod setPositiveButton(), setNegativeButton() a setNeutralButton(). Deklaraci takového posluchače si přidáme do úvodu třídy MainActivity pod naší proměnnou btn_basic_dialog:

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;
        }
    }
};

Přepsanou metodu onClick() rozhraní DialogInterface.OnClickListener jsme doplnili konstrukcí switch, kde rozlišujeme, jaké tlačítko bylo stisknuto. Každé tlačítko našeho dialogu při svém stisknutí vrací hodnotu typu int, kterou získáme v parametru which přepsané metody onClick(). Tato hodnota slouží k identifikaci stisknutého tlačítka a může nabývat hodnot jedné z těchto tří systémových konstant:

  • DialogInterface.BUTTON_POSITIVE: -1,
  • DialogInterface.BUTTON_NEGATIVE: -2,
  • DialogInterface.BUTTON_NEUTRAL: -3.

Podle konkrétní hodnoty parametru which můžeme určit další chování aplikace. Nově vytvořeným posluchačem dialogBtnClickListener nyní můžeme nahradit inline zápisy anonymní třídou na místě druhého parametru metod setPositiveButton(), setNegativeButton() a setNeutralButton():

alertDialogBuilder.setPositiveButton("Ano", dialogBtnClickListener);

alertDialogBuilder.setNegativeButton("Ne", dialogBtnClickListener);

alertDialogBuilder.setNeutralButton("Zavřít", dialogBtnClickListener);

Zrušení dialogového okna

V předchozím textu jsme si popsali obsluhu události kliknutí na tlačítko. Dále máme možnost odchytit událost zrušení dialogového okna. Uživatel může dialogové okno zrušit dvěma způsoby:

  • kliknutím na tlačítko Zpět na svém zařízení nebo
  • kliknutím kamkoliv mimo zobrazený dialog.

Chceme-li reagovat na událost zrušení, doplníme AlertDialog při jeho vytváření přepisem metody onCancel():

alertDialogBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        // Obslužný kód
    }
});

Můžeme také možnost takto zrušit AlertDialog uživateli zakázat. V takovém případě bychom použili metodu setCancelable(false).

V případě zakázání možnosti zrušení dialogového okna je nutné zajistit jinou možnost jeho zavření. Například pomocí zobrazeného tlačítka nebo výběrem položky z nabídnutého seznamu. Jinak uživatel nebude mít možnost takové dialogové okno zavřít.

Pod článkem máme k dispozici ke stažení archiv s aktualizovaným projektem naší ukázkové aplikace.

V příští části, Android AlertDialog - Ikona v hlavičce, si do hlavičky našeho dialogového okna přidáme ikonu z nabídky Asset Studia, jež je součástí Android Studia. Také si ukážeme možnost zavírání dialogového okna pomocí metody dismiss() přímo z Java kódu.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 3x (22.96 MB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Android AlertDialog - Základní systémové dialogové okno
Všechny články v sekci
Dialogová okna v Androidu
Přeskočit článek
(nedoporučujeme)
Android AlertDialog - Ikona v hlavičce
Článek pro vás napsal Pavel
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
Autor se věnuje programování v Javě, hlavně pro Android. Mezi jeho další zájmy patří Arduino, Minecraft.
Aktivity