Theory
'Gan' type कीजिए, बाक़ी देखिए
FestConnect की आख़िरी field 'College' है। सैकड़ों colleges हैं, और students को पूरा नाम type कराना typos को न्यौता देता है। बेहतर: जैसे ही वे 'Gan' type करते हैं, एक dropdown 'Ganpat University' offer करता है, tap कीजिए, हो गया। और जब वे कोई भी field type करते हैं, आप शायद एक live character count या instant validation चाहें।
दो pieces यह करते हैं: AutoCompleteTextView (suggestion dropdown वाला एक text field) और TextWatcher (हर keystroke पर चलने वाला code)। साथ में वे text input smart बनाते हैं।
Theory
एक search box जो आपका mind पढ़ता है
एक search bar सोचिए जो, कुछ letters के बाद, likely completions की एक छोटी list drop करता है, आप शायद ही पूरा type करें। यही AutoCompleteTextView है: यह एक list को आपने अब तक type किए के against filter करता है और matches offer करता है। और एक helper सोचिए जो आपके कंधे के ऊपर से देखते हुए type करते समय characters count करे, यही TextWatcher है, हर keystroke पर real time में react करते हुए।
Theory
Suggestions और keystroke events
AutoCompleteTextView:
- एक ArrayAdapter से suggestions feed कीजिए (एक Spinner जैसा)।
- `setThreshold(n)`: n typed characters के बाद suggestions दिखाइए (default 2)।
- User फिर भी free text type कर सकता है; suggestions सिर्फ़ assist करते हैं।
TextWatcher (किसी भी EditText पर addTextChangedListener से attach कीजिए), तीन callbacks:
beforeTextChanged(...),onTextChanged(...),afterTextChanged(...)।
इन्हें live counts, validation, या user के type करते हुए एक button enable करने के लिए इस्तेमाल कीजिए।
Practical
College autocomplete + live count
// AutoCompleteTextView: suggest colleges after 1 char
AutoCompleteTextView college = findViewById(R.id.college);
String[] list = {"Ganpat University", "MSU Baroda", "GTU"};
college.setAdapter(new ArrayAdapter<>(this,
android.R.layout.simple_dropdown_item_1line, list));
college.setThreshold(1); // suggest after 1 character
// TextWatcher on the name field: live character count
EditText name = findViewById(R.id.name);
TextView counter = findViewById(R.id.counter);
name.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence s,int a,int b,int c){}
public void onTextChanged(CharSequence s,int a,int b,int c){
counter.setText(s.length() + " chars"); // runs each keystroke
}
public void afterTextChanged(Editable s){}
});Think first
Autocomplete बनाम एक Spinner
एक AutoCompleteTextView और एक Spinner दोनों user को list से एक college चुनने देते हैं। एक लंबी list के लिए autocomplete prefer करने का एक कारण दीजिए, और एक चीज़ जो autocomplete allow करता है जो Spinner नहीं करता।
Show the answer
एक लंबी list के लिए (सैकड़ों colleges), autocomplete तेज़ है: user कुछ letters type करता है instantly filter करने के लिए, एक बड़ा Spinner dropdown scroll करने के बजाय। और autocomplete free text allow करता है: जिस student का college list में नहीं है वह बस इसे type कर सकता है, जबकि एक Spinner उन्हें predefined options तक restrict करता है। तो autocomplete = filter-as-you-type plus कुछ नया enter करने की freedom; एक Spinner = strictly एक fixed set में से pick करना।
Quiz
आप चाहते हैं जब भी user name field में type करे एक character counter update हो। कौन सा mechanism हर keystroke पर आपका code चलाता है?
- addTextChangedListener से attach किया एक TextWatcher
- Spinner का setOnItemSelectedListener
- onCreate में दिखाया एक Toast
- Button का onClick handler
Show the answer
addTextChangedListener से attach किया एक TextWatcher
एक TextWatcher (addTextChangedListener से जोड़ा गया) हर text change पर अपने callbacks fire करता है, तो यह user के type करते हुए एक live counter update कर सकता है (A)। एक Spinner का item-selected listener dropdown choices पर react करता है, typing पर नहीं (B)। onCreate में एक Toast startup पर एक बार चलता है (C), और एक onClick सिर्फ़ button tap होने पर fire होता है, हर keystroke पर नहीं (D)। Typing पर live reactions के लिए, एक TextWatcher tool है।
Watch out
Autocomplete और TextWatcher traps
1. AutoCompleteTextView पर कोई adapter नहीं: कोई suggestions नहीं दिखते। इसे एक ArrayAdapter चाहिए, एक Spinner जैसा।
2. Threshold confusion: setThreshold(1) एक character के बाद suggestions दिखाता है; default 2 है। अगर suggestions 'नहीं दिखते', threshold typed से ज़्यादा हो सकता है।
3. onTextChanged में heavy काम: यह हर keystroke पर चलता है, तो वहाँ slow operations avoid कीजिए; callback को light रखिए।
Formula
FestConnect Mobile पूरा हुआ
Build trace कीजिए: Unit 1 ने Android explain किया और tools set up किए, Unit 2 ने app बनाई (Activity, layout, manifest), Unit 3 ने वह XML सिखाया जिसमें वे files लिखी हैं, और Units 4-5 ने registration screen widget by widget assemble किया, एक Toast वाला EditText और Button, एक ToggleButton, CheckBoxes, RadioButtons, एक AlertDialog वाला Spinner, और एक TextWatcher वाला AutoCompleteTextView। एक exam में, हर widget का सही use (एक बनाम कई, transient बनाम modal, dropdown बनाम autocomplete) नाम दे पाना किसी भी अकेले method name से ज़्यादा worth है।
Summary
Key takeaways
- एक AutoCompleteTextView एक text field है जो आपके type करते ही एक adapter से matches suggest करता है; setThreshold(n) तय करता है कितने characters के बाद।
- यह एक list filter करता है पर फिर भी free text allow करता है, लंबी lists के लिए अच्छा (वहाँ Spinner से बेहतर)।
- एक TextWatcher, addTextChangedListener से attach किया गया, हर keystroke पर code चलाता है।
- इसके तीन callbacks हैं beforeTextChanged, onTextChanged, afterTextChanged; इन्हें light रखिए।
- TextWatcher को live counts, validation, या user के type करते हुए एक button enable करने के लिए इस्तेमाल कीजिए।
- Memory hook: एक search box जो आपका mind पढ़ता है, हर keystroke count करते एक helper के साथ।