Theory
બરાબર એક વર્ષ
FestConnect નો student બરાબર એક જ વર્ષમાં હોય છે: પહેલું, બીજું, કે ત્રીજું, ક્યારેય બે નહીં. CheckBoxes એને ખોટી રીતે અનેક પર નિશાન કરવા દેત. તમને એવું નિયંત્રણ જોઈએ જ્યાં એક વિકલ્પ પસંદ કરવાથી બાકીના છૂટી જાય.
એ છે RadioButton, પણ એક વળાંક સાથે: એકલો RadioButton એક જ પસંદગીનો અમલ કરાવતો નથી. જાદુ એમને RadioGroup માં વીંટવાથી આવે છે. જૂથ જ બટનોને પરસ્પર બાકાત બનાવે છે, અને અહીં એ સૌથી વધુ પુછાતી હકીકત છે.
Theory
જૂની ગાડીના radio નાં બટન
આ widget નું નામ જૂની ગાડીના radios પરથી પડ્યું છે: ભૌતિક બટનોની હાર જ્યાં એક દબાવવાથી બીજાં બહાર નીકળી જતાં, એટલે એક જ station પસંદ રહેતું. હાર (RadioGroup) જ એમને બાકાત બનાવતી; એકલું બટન એ કરી શકતું નહીં. Android નાં RadioButtons એ જ રીતે કામ કરે છે: એમને RadioGroup માં મૂકો અને એક પસંદ કરવાથી બીજાં છૂટી જાય છે.
Theory
જૂથ જ એને એક-પસંદગીવાળું બનાવે છે
RadioButtonને `RadioGroup` માં વીંટો; એ જ 'ફક્ત એક પસંદ' નો અમલ કરાવે છે.- પસંદગી શોધો:
group.getCheckedRadioButtonId()પસંદ થયેલા બટનનું id પાછું આપે છે, કે કોઈ ન હોય તો -1. - પછી
findViewById(thatId)બટન લાવે છે; એનું લખાણ કેisChecked()વાંચો. - પ્રતિભાવ આપો:
group.setOnCheckedChangeListener((grp, checkedId) -> { ... }).
RadioButtons ને Java માં ગતિશીલ રીતે બનાવીને જૂથમાં ઉમેરી પણ શકાય; પોતાનાં બનાવેલાં નિશાનીને ફરી શણગારે છે.
Practical
FestConnect: તમારું વર્ષ પસંદ કરો
// XML: <RadioGroup id=yearGroup> with 3 RadioButtons
// First (id=y1), Second (id=y2), Third (id=y3)
RadioGroup yearGroup = findViewById(R.id.yearGroup);
register.setOnClickListener(v -> {
int id = yearGroup.getCheckedRadioButtonId();
if (id == -1) {
Toast.makeText(this, "Please pick a year", Toast.LENGTH_SHORT).show();
return;
}
RadioButton chosen = findViewById(id);
Toast.makeText(this, "Year: " + chosen.getText(), Toast.LENGTH_SHORT).show();
});
// picking 'Second' automatically un-picks 'First' (the group enforces it)Think first
-1 નો શું અર્થ છે?
getCheckedRadioButtonId() એક પરિસ્થિતિમાં -1 પાછું આપે છે. ક્યારે, અને એ પરિણામ પર findViewById બોલાવતાં પહેલાં એની ચકાસણી કેમ મહત્ત્વની છે?
Show the answer
એ જ્યારે જૂથમાંનું એકેય RadioButton પસંદ ન થયું હોય ત્યારે -1 પાછું આપે છે (વાપરનારે હજી વર્ષ પસંદ કર્યું નથી). આ મહત્ત્વનું છે કારણ કે findViewById(-1) એ null પાછું આપે છે, અને null પર .getText() બોલાવતાં app તૂટે છે. એટલે id પર ભરોસો કરતાં પહેલાં તમારે if (id == -1) તપાસીને વાપરનારને પસંદ કરવાનું કહેવું પડે. એ જરૂરી પસંદગી ખરેખર થઈ છે કે નહીં એ ચકાસવાની RadioGroup વાળી આવૃત્તિ છે.
Quiz
ત્રણ RadioButtons વાપરનારને એકને બદલે ત્રણેય પર એકસાથે નિશાન કરવા દે છે. સૌથી સંભવિત કારણ શું છે?
- એ એક જ RadioGroup માં વીંટાયેલાં નથી
- એમની પાસે isChecked() ની પદ્ધતિ ખૂટે છે
- RadioButtons ને onCreate માં setChecked(true) જોઈએ
- RadioButtons ક્યારેય પરસ્પર બાકાત હોઈ શકે નહીં
Show the answer
એ એક જ RadioGroup માં વીંટાયેલાં નથી
પરસ્પર બાકાત હોવું એ RadioGroup માંથી આવે છે; બટનોને એક જૂથમાં વીંટ્યા વગર એ સ્વતંત્ર checkboxes જેવાં વર્તે છે અને બધાં પસંદ થઈ શકે છે (A). isChecked() એ વાંચવાની પદ્ધતિ છે, કારણ નહીં (B). onCreate માં setChecked બોલાવવાથી ફક્ત એક પહેલેથી પસંદ થાત, બાકાત થવાનો અમલ નહીં (C). જૂથબદ્ધ હોય ત્યારે RadioButtons જ પરસ્પર બાકાત widget છે (D ખોટું છે). ઉકેલ: એ બધાંને એક જ RadioGroup ની અંદર મૂકો.
Watch out
RadioButton ના ફાંદા
1. RadioGroup વગરનાં RadioButtons: એ પરસ્પર બાકાત હોવાનું ગુમાવે છે અને checkboxes જેવાં વર્તે છે. હંમેશા એમને જૂથબદ્ધ કરો.
2. -1 ને ન સંભાળવું: કશું પસંદ ન થયું હોય ત્યારે getCheckedRadioButtonId() એ -1 છે; findViewById(-1) એ null છે. વાપરતાં પહેલાં તપાસો.
3. એક જ પસંદગીને બે જૂથમાં વહેંચવી: જુદાં RadioGroups માંનાં બટન એકબીજા સાથે બાકાત નથી. એક તાર્કિક પસંદગીને એક જ જૂથમાં રાખો.
Theory
આગળ: dropdowns અને dialogs
થોડા વિકલ્પો માટે RadioButtons સારાં કામ કરે છે, પણ લાંબી યાદી (કહો કે T-shirt નાં 12 માપ કે 50 colleges) dropdown તરીકે વધુ સારી છે. હવે પછીનો પાઠ Spinner (dropdown થી પસંદ કરનારું) ને AlertDialog (અટકાવતી હા/ના ની પેટી) સાથે જોડે છે જેથી FestConnect માપ પસંદ કરીને submit કરતાં પહેલાં નોંધણીની ખાતરી કરી શકે.
Summary
Key takeaways
- RadioButtons વાપરનારને બરાબર એક વિકલ્પ પસંદ કરવા દે છે, પણ ત્યારે જ જ્યારે એ RadioGroup માં વીંટાયેલાં હોય (જે બાકાત થવાનો અમલ કરાવે છે).
- જૂથમાંનું એક બટન પસંદ કરવાથી બીજાં આપોઆપ છૂટી જાય છે.
- group.getCheckedRadioButtonId() પસંદ થયેલું id પાછું આપે છે, કે કશું પસંદ ન હોય તો -1.
- findViewById(-1) એ null છે, એટલે પસંદ થયેલું બટન વાંચતાં પહેલાં -1 ની ચકાસણી કરો.
- અનેકમાંથી એક માટે RadioGroup વાપરો; અનેક સ્વતંત્ર પસંદગી માટે CheckBoxes.
- Memory hook: જૂની ગાડીના radio નાં બટન, એક અંદર જાય એટલે બીજાં બહાર નીકળે.