
RadioButton מאפשר למשתמש לבחור ערך אחד מתוך כמה אפשרויות, אבל זה קורה רק אם הם מוגדרים כקבוצה. השיעור מראה את RadioGroup, ופתרון חלופי לכשאי אפשר לעטוף את הכפתורים.LinearLayout אנכי עם ארבעה RadioButton (single, married, divorced, widowed) ו-TextView עם please select your family status. בהרצה אפשר לסמן כמה כפתורים יחד, כי כל אחד עומד בפני עצמו.RadioGroup: עוטפים את הכפתורים ב-RadioGroup. הוא יורש מ-LinearLayout, ובבנאי שלו מוגדר setOrientation אנכי, ולכן הוא אנכי כברירת מחדל. אפשר לשנות ל-horizontal. עכשיו רק כפתור אחד נבחר בכל רגע.TableLayout, כפתורי הרדיו נמצאים בשורות שונות ולא באותו מקום, ובתוך RadioGroup אפשר לשים רק RadioButton. לכן בחירת פיצה אחת לא מבטלת אחרות.onClick: נותנים לכל כפתור אותו onClick, למשל radioButtonPizza_onClick, שיוצר פונקציה אחת משותפת.uncheckAllRadioButtons(ViewGroup parent), שרצה בלולאה על הילדים, ממירה כל RadioButton ומבטלת סימון, ואם הילד ViewGroup קוראת לעצמה (רקורסיה). שולחים אליה את findViewById(android.R.id.content).View של הפונקציה הוא הרכיב שנלחץ. ממירים אותו ל-RadioButton וקוראים ל-setChecked(true).RadioGroup רכיבים שאינם RadioButton או קבוצות שאין להן הורה משותף, המערכת לא מבינה מה רוצים. במקרה כזה משתמשים בפתרון של onClick ורקורסיה.הטקסט המלא של הדקות הראשונות בהרצאה «Radio Group» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחד הרכיבים שהתעסקנו איתו בעבר הוא ה-radio button. רדיו בטון זה רכיב שמיועד לאפשר למשתמש לבחור אחד מסדרת ערכים או מסדרת אופציות שמוצגות לו על המסך.
בואו נראה משהו נוסף שעדיין לא ראינו בנוגע ל-radio button. לצורך הדוגמה בואו ניקח כאן ליניאר לייאאוט, נגדיר כאן את ההגדרות הסטנדרטיות שאנחנו תמיד מגדירים, יש לנו פה ריפוד כזה, יש לנו פה אוריינטיישן ורטיקל ונגדיר פשוט רכיבי רדיו בטן
ראפ קונטנט ובואו נניח שאנחנו רוצים שהמשתמש יכניס לנו מצב משפחתי אז יש לנו פה טקסט סינגל יש לנו פה טקסט כך ארבעה כאלה של מריד יש לנו פה טקסט דיבורסט ויש לנו פה את המצב המשפחתי האחרון ווידאוט בואו נגדיר פה למשתמש טקסט view שמגדיר please select your family status text size 20 בואו נשכפל את הtext size גם להם שנראה יותר טוב ונגדיר gravity
center horizontal והכל מוכן כל ה-UI מוכן אנחנו רק רוצים להריץ את זה ולבדוק איך זה מתנהג אז בואו נריץ נריץ את זה באמולטור והנה התוכנית רצה ואנחנו רוצים לאפשר למשתמש לבחור מצב מספחתי אחד ויחיד.
אז המשתמש מסמן סינגל ואז הוא מסמן married ואנחנו רואים שהסינגל לא מתבטל. זאת אומרת אין פה איזושהי קבוצה מסוימת ביניהם אלא כל אחד הוא stand alone ואפשר פשוט ללחוץ עליו וזה לא משפיע על האחרים.
מה שאנחנו רוצים לראות זה איך כן להשפיע על האחרים. אז בכדי להפוך את כל הרדיו באטנס האלה לקבוצה אנחנו צריכים להפוך אותם ברדיו גרופ.
רדיו גרופ בואו ניקח ראפ קונטנט זה בעצם תגית לייאאוט שיורשת את ליניאר לייאאוט ולכן אוטומטית הוא מסדר את כל הרכיבים בתוכו בצורה ליניארית.
שימו לב הדיפולט זה ורטיקל בואו נלחץ כאן על קונטרול נרחף מעל ונראה בטול טיפה קטנצ'יק שיש לנו public class radio group extends linear layout אם אנחנו נלחץ עליו אנחנו נראה שאנחנו אוטומטית מגיעים למחלקה radio group ואם אנחנו מסתכלים על הקונסטרקטור שלו אנחנו יכולים לראות set orientation vertical זאת אומרת שכבר בקונסטרקטור יש פה שינוי
של האוריינטציה לאוריינטציה ורטיקלית ולכן זה אוטומטית linear layout vertical אנחנו יכולים כמובן בגלל שאנחנו יורשים את ליניאר לייאוט להשתמש בכל התכונות של הליניאר לייאוט לדוגמה להגדיר שהאוריינטיישן זה הוריזונטל ולשנות את זה להוריזונטל מה שלא כל כך יפה ומסתדר לנו פה בלייאוט
הספציפי הזה ולכן נוריד את זה נשאיר אותו כדיפולט ורטיקל עכשיו בואו נריץ ונראה איך כעת הרדיו בטנס מתנהגים כשלוחצים על מספר רדיו בטנס הנה התוכנית רצה נלחץ על סינגל נלחץ על מריד ואנחנו רואים שהרדיו גרופ גרם לזה שרק אחד יכול להיבחר בכל רגע נתון אז רדיו גרופ מאפשר לנו להגדיר קבוצה של רדיו בטאנס הוא גם כן ליהאוט הוא
יורש מליניאר ליהאוט אוטומטית ורטיקלית אנחנו יכולים לשנות את זה אם אנחנו רוצים אבל בכדי לבצע קבוצה של רדיו בטאנס אנחנו חייבים אותו אבל מה קורה אם הלייאוט שלנו הוא כזה שאנחנו לא יכולים לעטוף את הרדיו בטרנס השונים ברדיו גרופ?
כאן אין מצב כזה מפני שכל הרדיו בטרנס נמצאים במקום אחד ואז מאוד קל פשוט לעטוף אותם ברדיו גרופ.
אבל באחד הסרטונים הקודמים שעשינו היה לנו איזשהו לייאוט שבעצם היה טייבל לייאוט שהגדיר בתוכו שורות שורות טייבל רואו ובטייבל רואו הגדרנו רדיו בטנס בתוך הטייבל רואו.
אז אם כאן אנחנו רוצים להפוך קבוצה אנחנו צריכים לעשות משהו קצת אחר. קודם כל בואו נריץ את התוכנית הזאת ונראה איך בדיוק מתנהגים כרגע רדיו בטנס כאשר לא עטפנו אותם ברדיו גרופ.
אז הנה התוכנית רצה ואנחנו בוחרים פיצה נפוליטנה ופיצה סיסיליאנית ובלקנית וגורמט ואנחנו רואים שכולם בחורים אפילו שאנחנו רוצים שרק אחד מהם בוא נניח שהאפליקציה הזאת מבקשת לבחור רק פיצה אחת מכל אלה אז איך אנחנו יכולים עכשיו לטפל בסיטואציה הזאת אם אנחנו מסתכלים על ה-XML
אנחנו בעצם רואים שהרדיו בטנס השונים לא נמצאים באותו המקום מבחינת תגיות ולכן אנחנו לא יכולים לעטוף את כולם ברדיו גרופ.
אנחנו לא יכולים לבוא לפה ולהגדיר רדיו גרופ ולקחת את הרדיו גרופ הזה ולשים אותו פה למטה ובכך לעטוף קבוצה אחת את כולם ופשוט אנחנו רואים שזה לא עובד והמערכת בכלל לא מבינה מה אנחנו רוצים, בתוך רדיו גרופ אפשר לשים רק רכיבי רדיו בטן, ובעצם הקונספט הנכון שלו.
בואו נחזיר את זה חזרה. נעשה פה קונטרול Z, בצורה כזאת. אז מה שאנחנו רוצים לעשות זה פעולה אחרת בכדי להצליח לגרום להתנהגות הזאת שבחירה של רדיו בטן מבטלת את כל היתר, זה די פשוט מה שאנחנו צריכים לעשות זה לגשת לכל אחד מה-radio buttons ולהירשם לאירוע on-click
שלו בואו נקרא לפונקציה radio button pizza פעילו underline on-click ואנחנו רוצים שהאירוע הזה בואו רק נרשום או נלחץ על enter ונגיע לפונקציה עצמה שלו אנחנו רוצים שכל radio בטון יפעיל לנו בדיוק את אותה הפונקציה בואו ניגש לרדיו בטון הזה