Theory
एक लंबी list, फिर एक final check
FestConnect को दो और चीज़ें चाहिए: एक T-shirt size picker (S, M, L, XL, XXL) जो पाँच radio buttons से screen न खाए, और एक final 'Confirm registration?' box जिसे submit से पहले student को answer करना है।
ये दो widgets हैं जो अक्सर साथ दिखते हैं: Spinner (एक compact dropdown) और AlertDialog (एक modal yes/no pop-up)। एक list से एक choice gather करता है; दूसरा रुकता है और एक question पूछता है। इन्हें एक pair की तरह सीखिए।
Theory
एक drop-down menu और एक security gate
एक Spinner एक rail पर एक restaurant menu है: यह fold रहता है आपकी current pick दिखाते हुए, और tap होने पर पूरी list दिखाने के लिए खुल जाता है। एक AlertDialog एक security gate है: यह corridor block करता है और तब तक जाने नहीं देता जब तक आप 'proceed?' का yes या no answer न करें। एक एक तरतीबी chooser है; दूसरा एक deliberate stop-and-decide है।
Theory
Spinner, फिर AlertDialog
Spinner (dropdown):
- इसे एक ArrayAdapter से भरिए (एक string array से)।
setOnItemSelectedListenerसे react कीजिए।getSelectedItem()(याgetSelectedItemPosition()) से पढ़िए।
AlertDialog (modal question):
new AlertDialog.Builder(this)से build कीजिए।setTitle,setMessage,setPositiveButton("OK", ...),setNegativeButton("Cancel", ...)।create()फिरshow()(या बस.show()) से finish कीजिए।
Dialog block करता है जब तक user answer न करे, एक Toast के उलट।
Practical
Size Spinner, फिर confirm
// Spinner: feed it a list with an adapter
Spinner size = findViewById(R.id.size);
String[] sizes = {"S", "M", "L", "XL", "XXL"};
size.setAdapter(new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, sizes));
register.setOnClickListener(v -> {
String picked = size.getSelectedItem().toString();
// AlertDialog: modal confirm before submitting
new AlertDialog.Builder(this)
.setTitle("Confirm")
.setMessage("Register with size " + picked + "?")
.setPositiveButton("Yes", (dialog, which) ->
Toast.makeText(this, "Registered!", Toast.LENGTH_SHORT).show())
.setNegativeButton("Cancel", null)
.show();
});Think first
Toast या AlertDialog?
FestConnect registration को एक Toast ('Registered!') या एक AlertDialog ('Register with size L? Yes/No') से confirm कर सकता है। एक final confirmation के लिए कौन सा फिट होता है जिसे user को actively agree करना है, और दूसरा यहाँ ग़लत क्यों है?
Show the answer
AlertDialog, क्योंकि यह modal है: यह block करता है और user के actively Yes या No चुनने का इंतज़ार करता है, जो exactly वही है जो एक final confirmation को चाहिए। एक Toast इस step के लिए ग़लत है क्योंकि यह बस flash होकर fade हो जाता है बिना buttons के, user agree या decline नहीं कर सकता, और इसे पूरी तरह miss कर सकता है। Passive 'done' feedback के लिए (उनके confirm करने के बाद) एक Toast इस्तेमाल कीजिए, और जब आपको असली decision चाहिए एक AlertDialog।
Quiz
एक Spinner tap होने पर इसके dropdown में कुछ नहीं दिखाता। सबसे ज़्यादा संभावना missing step क्या है?
- Items की list supply करने के लिए कोई adapter set नहीं किया गया
- इसे एक RadioGroup wrapper चाहिए
- AlertDialog create नहीं किया गया
- getSelectedItem() कभी call नहीं किया गया
Show the answer
Items की list supply करने के लिए कोई adapter set नहीं किया गया
एक Spinner खाली रहता है जब तक आप इसे एक adapter (जैसे sizes का एक ArrayAdapter) से data न दें; कोई adapter नहीं, कोई items नहीं (A)। Spinners RadioGroups में wrapped नहीं होते (B)। एक AlertDialog एक अलग widget है और Spinner भरने से unrelated है (C)। getSelectedItem() current pick पढ़ता है, यह list नहीं भरता (D)। हमेशा एक Spinner को इसके options देने के लिए एक adapter set कीजिए।
Watch out
Spinner और dialog traps
1. बिना adapter वाला Spinner: यह कुछ नहीं दिखाता। इसे एक ArrayAdapter से populate कीजिए।
2. एक AlertDialog build करना पर इसे show न करना: Toast की तरह, आपको show() call करना ज़रूरी है (create() के बाद, या सीधे)। कोई show() नहीं, कोई dialog नहीं।
3. एक Toast इस्तेमाल करना जहाँ एक decision required है: एक Toast Yes/No capture नहीं कर सकता। एक असली choice के लिए, positive/negative buttons वाला एक AlertDialog सही है।
Theory
अगला: आख़िरी widget, smart text
एक widget बचा है: AutoCompleteTextView, एक text field जो आपके type करते ही matches suggest करता है (FestConnect की college field के लिए बढ़िया), एक TextWatcher के साथ pair किया गया जो हर keystroke पर react करता है। यह Spinner से adapter idea को live text events के साथ combine करता है, एक फिट finale जो unit को साथ बाँधता है।
Summary
Key takeaways
- एक Spinner एक dropdown है; इसे एक ArrayAdapter से populate कीजिए और getSelectedItem() से choice पढ़िए।
- एक लंबी list से एक choice के लिए एक Spinner इस्तेमाल कीजिए (कुछ options के लिए RadioButtons फिट होते हैं)।
- एक AlertDialog AlertDialog.Builder से बना एक modal question है: setTitle, setMessage, setPositiveButton/setNegativeButton, फिर show()।
- एक AlertDialog answer होने तक block करता है (एक असली decision); एक Toast बस flash होता है (passive feedback)।
- एक Spinner को एक adapter चाहिए, और एक AlertDialog को show() चाहिए, वरना कुछ नहीं दिखता।
- Memory hook: एक drop-down menu (Spinner) और एक security gate (AlertDialog)।