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_SHORTcca 2 sekundy,LENGTH_LONGcca 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()