Theory
લાંબી યાદી, પછી છેલ્લી ચકાસણી
FestConnect ને હજી બે વસ્તુ જોઈએ: T-shirt નું માપ પસંદ કરનારું (S, M, L, XL, XXL) જે પાંચ radio નાં બટનથી પડદો ખાઈ ન જાય, અને છેલ્લે 'નોંધણીની ખાતરી?' ની પેટી જેનો જવાબ student એ submit કરતાં પહેલાં આપવો પડે.
એ બે widgets છે જે ઘણી વાર સાથે દેખાય છે: Spinner (સઘન dropdown) અને AlertDialog (અટકાવતી હા/ના ની popup). એક યાદીમાંથી પસંદગી લે છે; બીજું અટકીને પ્રશ્ન પૂછે છે. એમને જોડ તરીકે શીખો.
Theory
નીચે ઊતરતું menu અને સલામતીનો દરવાજો
Spinner એ સળિયા પર લટકતું restaurant નું menu છે: એ વળેલું રહીને તમારી હાલની પસંદગી દેખાડે છે, અને દબાવતાં આખી યાદી ઉઘાડવા ખૂલી જાય છે. AlertDialog એ સલામતીનો દરવાજો છે: એ પરસાળ રોકે છે અને તમે 'આગળ વધું?' નો હા કે ના જવાબ ન આપો ત્યાં સુધી પસાર થવા દેતો નથી. એક સુઘડ પસંદ કરનારું છે; બીજું ઇરાદાપૂર્વકનું અટકો-અને-નક્કી-કરો છે.
Theory
પહેલાં Spinner, પછી AlertDialog
Spinner (dropdown):
- એને ArrayAdapter થી ભરો (strings ના array માંથી).
setOnItemSelectedListenerથી પ્રતિભાવ આપો.getSelectedItem()(કેgetSelectedItemPosition()) થી વાંચો.
AlertDialog (અટકાવતો પ્રશ્ન):
new AlertDialog.Builder(this)થી બાંધો.setTitle,setMessage,setPositiveButton("OK", ...),setNegativeButton("Cancel", ...).create()પછીshow()થી પૂરું કરો (કે સીધું.show()).
Toast થી વિપરીત, dialog વાપરનાર જવાબ ન આપે ત્યાં સુધી અટકાવે છે.
Practical
માપનું Spinner, પછી ખાતરી
// 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 નોંધણીની ખાતરી Toast ('Registered!') થી કે AlertDialog ('Register with size L? Yes/No') થી કરી શકે. વાપરનારે સક્રિય રીતે સંમત થવું પડે એવી છેલ્લી ખાતરી માટે કયું બંધબેસે છે, અને અહીં બીજું કેમ ખોટું છે?
Show the answer
AlertDialog, કારણ કે એ અટકાવતું છે: એ રોકે છે અને વાપરનાર સક્રિય રીતે હા કે ના પસંદ કરે એની રાહ જુએ છે, અને છેલ્લી ખાતરીને બરાબર એ જ જોઈએ. આ પગલા માટે Toast ખોટું છે કારણ કે એ ફક્ત ચમકીને ઓસરી જાય છે, બટન વગર, વાપરનાર સંમત કે અસંમત થઈ શકતો નથી, અને એ કદાચ સાવ ચૂકી પણ જાય. નિષ્ક્રિય 'થઈ ગયું' ના પ્રતિભાવ માટે Toast વાપરો (એ ખાતરી આપે એ પછી), અને ખરેખરો નિર્ણય જોઈએ ત્યારે AlertDialog.
Quiz
Spinner દબાવતાં એના dropdown માં કશું દેખાતું નથી. સૌથી સંભવિત ખૂટતું પગલું કયું છે?
- વસ્તુઓની યાદી પૂરી પાડવા કોઈ adapter ગોઠવાયું નથી
- એને RadioGroup નું આવરણ જોઈએ
- AlertDialog બનાવાયું નહોતું
- getSelectedItem() ક્યારેય બોલાવાયું નહોતું
Show the answer
વસ્તુઓની યાદી પૂરી પાડવા કોઈ adapter ગોઠવાયું નથી
Spinner ત્યાં સુધી ખાલી રહે છે જ્યાં સુધી તમે એને adapter દ્વારા data ન આપો (દા.ત. માપનું ArrayAdapter); adapter નહીં, વસ્તુઓ નહીં (A). Spinners ને RadioGroups માં વીંટવામાં આવતાં નથી (B). AlertDialog એ અલગ widget છે અને Spinner ભરવા સાથે અસંબંધિત છે (C). getSelectedItem() હાલની પસંદગી વાંચે છે, એ યાદી ભરતું નથી (D). Spinner ને એના વિકલ્પો આપવા હંમેશા adapter ગોઠવો.
Watch out
Spinner અને dialog ના ફાંદા
1. Adapter વગરનું Spinner: એમાં કશું દેખાતું નથી. એને ArrayAdapter થી ભરો.
2. AlertDialog બાંધીને દેખાડવાનું ભૂલી જવું: Toast ની જેમ, તમારે show() બોલાવવું જ પડે (create() પછી, કે સીધું). show() નહીં, તો dialog નહીં.
3. નિર્ણય જોઈએ ત્યાં Toast વાપરવું: Toast હા/ના પકડી શકતું નથી. ખરેખરી પસંદગી માટે positive/negative બટન વાળું AlertDialog સાચું છે.
Theory
આગળ: છેલ્લું widget, હોશિયાર લખાણ
એક widget બાકી છે: AutoCompleteTextView, એટલે કે લખાણનું એવું ખાનું જે તમે લખો તેમ મળતાં સૂચનો આપે છે (FestConnect ના college ના ખાના માટે સરસ), અને એની સાથે TextWatcher જે દરેક કળ પર પ્રતિભાવ આપે છે. એ Spinner ના adapter ના વિચારને જીવતાં લખાણનાં events સાથે જોડે છે, જે એકમને બાંધતું બંધબેસતું સમાપન છે.
Summary
Key takeaways
- Spinner એ dropdown છે; એને ArrayAdapter થી ભરો અને પસંદગી getSelectedItem() થી વાંચો.
- લાંબી યાદીમાંથી એક પસંદગી માટે Spinner વાપરો (થોડા વિકલ્પોને RadioButtons બંધબેસે છે).
- AlertDialog એ AlertDialog.Builder થી બંધાતો અટકાવતો પ્રશ્ન છે: setTitle, setMessage, setPositiveButton/setNegativeButton, પછી show().
- AlertDialog જવાબ ન અપાય ત્યાં સુધી અટકાવે છે (ખરેખરો નિર્ણય); Toast ફક્ત ચમકે છે (નિષ્ક્રિય પ્રતિભાવ).
- Spinner ને adapter જોઈએ, અને AlertDialog ને show() જોઈએ, નહીં તો કશું દેખાતું નથી.
- Memory hook: નીચે ઊતરતું menu (Spinner) અને સલામતીનો દરવાજો (AlertDialog).