Objednávka ‐ vylepšení základní verze - zizanek/-github-tz-pma-2026-priprava GitHub Wiki

Možná drobná vylepšení aplikace: Zpětná vazba a kalkulace ceny

Aplikaci na objednávku kola lze didakticky rozšířit o několik základních prvků, které studentům ukáží běžné návyky mobilního vývoje.


1. Zobrazení rychlé notifikace (Toast zpráva)

Toast představuje krátkou vyskakovací bublinu v dolní části obrazovky, která po chvíli sama zmizí. Je ideální jako potvrzení odeslání objednávky.

Implementace v Kotlinu:

Uvnitř posluchače binding.btnOrder.setOnClickListener se na konec přidá volání tovární metody Toast.makeText():

import android.widget.Toast

// Zobrazení krátkého oznámení
Toast.makeText(
    this, 
    "Objednávka kola ${bike.text} byla úspěšně odeslána!", 
    Toast.LENGTH_SHORT
).show()
  • První parametr (this) představuje kontext aktuální aktivity.
  • Druhý parametr je zobrazovaný text.
  • Třetí parametr určuje délku zobrazení (LENGTH_SHORT cca 2 sekundy, LENGTH_LONG cca 3,5 sekundy).
  • Volání metody .show() je povinné, bez něj se notifikace nevykreslí.

2. Modernější alternativa: Snackbar s možností akce Zpět

V materiálovém designu (Material 3) je místo Toastu doporučováno používat komponentu Snackbar. Její výhodou je možnost přidat interaktivní tlačítko (např. Zpět / Undo).

Implementace:

import com.google.android.material.snackbar.Snackbar

Snackbar.make(binding.main, "Objednávka byla odeslána", Snackbar.LENGTH_LONG)
    .setAction("Vrátit zpět") {
        binding.tvOdrer.text = "Objednávka byla zrušena."
    }
    .show()

3. Dynamický výpočet ceny (Práce s čísly a proměnnými)

Namísto pouhého skládání textu lze studentům ukázat sčítání číselných hodnot podle zvolené konfigurace.

Ukázka logiky:

// Základní cena podle modelu
var totalPrice = when (binding.rgBikes.checkedRadioButtonId) {
    binding.rbBike1.id -> 95000   // Oiz M10
    binding.rbBike2.id -> 75000   // Oiz M20
    binding.rbBike3.id -> 55000   // Oiz M30
    else -> 0
}

// Příplatky za výbavu
if (binding.cbFork.isChecked) totalPrice += 12000
if (binding.cbSaddle.isChecked) totalPrice += 2500
if (binding.cbHandleBar.isChecked) totalPrice += 3000

// Výpis do textového pole
binding.tvOdrer.text = "Model: ${bike.text}\nCelková cena: $totalPrice Kč"

4. Tlačítko pro reset formuláře

Do rozhraní lze přidat tlačítko btnReset, které vrátí formulář do výchozího stavu:

binding.btnReset.setOnClickListener {
    binding.rbBike1.isChecked = true
    binding.cbFork.isChecked = false
    binding.cbSaddle.isChecked = false
    binding.cbHandleBar.isChecked = false
    binding.tvOdrer.text = getString(R.string.textview_order_summary_text)
    binding.ivBike.setImageResource(R.drawable.oiz_m10_tr)
}

5. Potvrzovací dialog (AlertDialog)

Před odesláním objednávky je možné zobrazit systémové dialogové okno s dotazem „Opravdu chcete objednat kolo za X Kč?“ s volbami Ano / Ne:

import androidx.appcompat.app.AlertDialog

AlertDialog.Builder(this)
    .setTitle("Potvrzení objednávky")
    .setMessage("Opravdu si přejete objednat vybrané kolo?")
    .setPositiveButton("Ano, objednat") { _, _ ->
        Toast.makeText(this, "Objednáno!", Toast.LENGTH_SHORT).show()
    }
    .setNegativeButton("Zrušit", null)
    .show()