PracticU

View Group

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › View Group
מילון מושגים:
View - רכיב שאחראי על הצגת המידע למשתמש (התצוגה) בדפוס MVC. גם טבלה וירטואלית מבוססת שאילתה במסד נתונים.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
HTML - שפת הסימון שבה בונים את מבנה ותוכן דפי האינטרנט, באמצעות תגיות שמגדירות כותרות, פסקאות, קישורים ועוד.
CSS - שפת עיצוב שקובעת את המראה של דפי אינטרנט: צבעים, גופנים, מיקום וסידור הרכיבים.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.
רקורסיה - טכניקה שבה פונקציה קוראת לעצמה כדי לפתור בעיה על ידי פירוקה למקרים קטנים יותר.
Android - מערכת הפעלה מבוססת Linux לטלפונים ולמכשירים ניידים, שפותחה על ידי גוגל.

View Group
כל ה-Layout באנדרואיד יורשים מחלקת בסיס אחת, ViewGroup, וכך גם רכיבים אחרים שמכילים רכיבי ילד. מכיוון שאפשר לגשת מהקוד לילדים של Layout, אפשר לבצע פעולה על כולם בבת אחת. השיעור מראה איך עושים זאת, כולל Layout מקוננים.
השלבים העיקריים
1. ספירת ילדים: נותנים ל-RelativeLayout מזהה, מאתרים אותו עם findViewById וקוראים ל-getChildCount(). ב-Ctrl ובריחוף על המחלקה רואים ש-RelativeLayout יורש מ-ViewGroup, ובו הפונקציה. בדוגמה מוצגים שישה ילדים.
2. קבלת הילדים עצמם: בלולאה מ-0 עד childCount קוראים ל-getChildAt(i) ומקבלים View. אפשר להציג את השם עם getClass().getSimpleName() כדי לראות את סוגי הרכיבים.
3. דוגמה מעשית: LinearLayout אנכי עם השאלה Which of the following programming technologies do you know?, ובתוך LinearLayout פנימי שלושה CheckBox (‏HTML, ‏CSS ו-JavaScript). לחצן clear all צריך לבטל את הסימון של כולם בבת אחת, בלי לגשת לכל אחד בנפרד.
4. לולאה וקסטינג: רצים על ילדי ה-LinearLayout הפנימי, ממירים כל אחד ל-CheckBox וקוראים ל-setChecked(false).
5. קריסה כשיש רכיב אחר: כשמוסיפים TextView באותו Layout, האפליקציה קורסת, כי מנסים להמיר TextView ל-CheckBox. את השגיאה רואים בחלונית ההודעות: ‏fatal exception ו-cannot be cast to checkbox, עם קישור שמוביל לשורה שגרמה לחריגה.
6. הפתרון: מקבלים את הילד כ-View, בודקים child instanceof CheckBox, ורק אז ממירים ומבטלים סימון.
7. Layout מקוננים: עם כמה LinearLayout זה בתוך זה, getChildCount ו-getChildAt מחזירים רק את הילדים הישירים, ולכן הקוד הקודם לא מספיק.
8. רקורסיה: כותבים פונקציה uncheckAllCheckBoxes(ViewGroup parent). בלולאה על ילדיה: אם הילד CheckBox, מבטלים סימון. אם הוא ViewGroup, הפונקציה קוראת לעצמה איתו. המרצה ממליץ ללמוד רקורסיה למי שלא מכיר.
9. נקודת התחלה: אפשר לתת ID ל-Layout הראשי, אבל אפשר גם לקבל את ה-parent שלו עם findViewById(android.R.id.content) ולשלוח אותו לפונקציה.
שימו לב
כשהאפליקציה קורסת לא לוחצים על ההודעה, אלא חוזרים לחלונית ה-log ומחפשים את השגיאה האדומה, כי המידע ממשיך לרוץ קדימה ועלול ללכת לאיבוד.
כך אפשר לעבור על כל הרכיבים בכל עומק של Layout ולבצע פעולה רק על הסוג המתאים.
השיעור הבא בקורס: Radio Group

פרקי ההרצאה: View Group

  1. 00:00

    מחלקת הבסיס View Group

  2. 01:48

    שימוש ב-getChildCount

  3. 04:06

    מעבר על הילדים עם getChildAt

  4. 05:55

    הצגת סוג הרכיב עם getSimpleName

  5. 07:22

    בניית טופס בחירת טכנולוגיות

  6. 09:20

    לחצן clear all לאיפוס checkbox

  7. 11:24

    לולאה על כל ה-checkbox בלאאוט

  8. 13:20

    קריסה עם רכיב שאינו checkbox

תמלול ההרצאה: View Group

הטקסט המלא של הדקות הראשונות בהרצאה «View Group» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

    כל רכיבי ה-Layout יורשים את אותה מחלקת בסיס בשם View Group. View Group זאת מחלקת הבסיס של כל רכיבי ה-Layout ושל רכיבים נוספים שמאפשרים לשים בתוכם Child Elements.

  2. 00:19

    אז בואו נראה מה זה ה-View Group ואיך אנחנו יכולים להשתמש במחלקה הזאת בפרויקטים שלנו. יש לנו פה איזשהו Layout של Relative וסתם אני זורק כאן כל מיני רכיבים בכדי לבצע איזושהי בדיקה לגביהם בקוד.

  3. 00:39

    אז יש לנו פה כל מיני רכיבים, יש לנו פה איזשהו לחצן, בואו ניגש ללחצן הזה, נבצע אירוע onClick, ButtonShowInfo נקרא לזה, ויש לנו כאן את ה-TextView הזה, ואנחנו רואים שיש לו ID, TextView, בואו נשנה את ה-ID ל-TextViewInfo.

  4. 01:05

    כעת נחזור, ניגש ונייצר אירוע בקוד Java, ואנחנו יכולים עכשיו לגשת ולקבל אינפורמציה לגבי ה-child elements של ה-layout. ראשית, יש לנו פה relative layout ונגדיר כאן איזשהו ID עבור ה-layout הזה.

  5. 01:30

    נקרא לזה relative layout main. ניגש לקוד, ניצור כאן relative layout, נאתר אותו, mindviewbyid, ir.id.relativeLayoutMain וכעת בואו נראה כמה דברים מעניינים לגביו.

  6. 02:06

    יש לנו פונקציה שנקראת getChildCount. הפונקציה הזאת מחזירה לנו את מספר ה-childs שקיימים עבור אותו layout. אם אנחנו מסתכלים אנחנו רואים שה-relativeLayout כמחלקה, אם אנחנו לוחצים קונטרול ומרחפים מעל, אנחנו יכולים בעצם לראות שהיא יורשת את view group אפשר לראות פה extends of view group ואם אנחנו לוחצים

  7. 02:35

    עליה אנחנו ממש מגיעים ל-relative layout ואנחנו רואים שהיא יורשת את view group ל-view group יש את הפונקציה הזאת שנקראת get child count ולכן לכל layout יש אפשרות לדעת כמה ילדים יש לו בואו נראה הפונקציה הזאת מחזירה לנו integer נקבל אותו ואנחנו רוצים להציג אותו לצורך כך בואו בואו ניגש וניקח את ה-ID של ה-TextView ונייצר כאן Private TextView עם ה-ID הזה.

  8. 03:23

    ניגש ונאתר אותו בצורה כזאת וכעת ניגש אליו, Set Text ונכניס Child Count בצורה כזאת. בואו נריץ, הנה האפליקציה רצה, בואו נלחץ על הרחצן ונראה שהוא אומר שיש לנו שישה ילדים, 2 3 4 5 6 בדיוק שישה ילדים אוקיי עכשיו בואו ניגש ונקבל את הילדים עצמם איך אנחנו יכולים לעשות את זה נרוץ בלולאה

  9. 04:16

    i שווה 0 i קטן מ-child count אנחנו רוצים לקבל את ה-child אז בואו ניקח פה משתנה view וניגש ל-layout relative layout מיין ויש לנו את הפונקציה get child at אם אנחנו נותנים לה את האינדקס אז היא מביאה לנו את ה-view הזה בואו נקרא לזה v כי כבר יש לנו פה view כעת אנחנו יכולים לגשת ולייצר איזושהי מחרוזת להצגה בואו ניקח string

  10. 05:00

    message דיר בהתחלה את ה-child count במסג' עם איזושהי ירידת שורה וכעת נבוא למסאג', נכניס את v.get+2-string ונציג את המסאג' בלבד. בואו נריץ, נלחץ על הלחצן ואנחנו רואים שיש לנו פה את הפריטים עצמם, קצת לא רואים את זה טוב כי חסר לנו פה ירידת שורה.

  11. 05:58

    במקום 2-string בואו נקרא למשהו קצת יותר פשוט get simple name, זה לנו רק את השם של הרכיב עצמו. בואו נריץ, נלחץ על הלחצן ואנחנו רואים שיש לנו פה ממש השגה של הטיפוסים עצמם שיש איך אנחנו יכולים להשתמש עכשיו בנתון הזה איך אנחנו יכולים להשתמש בטיפוסים עצמם או במספר שלהם עבור לייאוט מסוים אז ברור ראשית ניפטר מכל אלה

  12. 06:40

    ונשנה את זה לליניאר לייאוט בכדי להראות כאן איזה שהוא עיצוב פשוט נוריד את זה זה ואת זה נגדיר שהלייאוט שלנו הוא ורטיקל נגדיר לו איזשהו איי-די שיהיה ליניאר לייאוט מיין ובואו נבקש מהמשתמש על ידי טקסט view את הדבר הבא which of the following programming technologies do you know נגדיר כאן טקסט סייז

  13. 07:35

    20 sp נגדיר כאן טקסט tile bold בצורה כזאת, עכשיו בואו ניקח פה עוד linear layout ניתן לו wrap content ניתן לו תכונת margin 10dp background כלשהו נגדיר אותו כוורטיקל וניתן לו איזה אדינג מסוים רק בשביל האסתטיקה עכשיו בתוכו נגדיר סדרה של צ'קבוקס יש לנו פה צ'קבוקס ראשון wrap content בעל הטקסט html

  14. 08:40

    יש פה טקסט בוקס שני ושלישי, יש לנו פה את שפת CSS שהיא העיצוב של טכנולוגיית ה-Web ויש לנו פה JavaScript גם כן שפת Web שמורצת על ידי דפדפנים.

  15. 08:59

    אוקיי עכשיו אנחנו רוצים שהיוזר בעצם יסמן לנו איזה שפת תכנות הוא יודע. בנוסף אנחנו רוצים שיהיה לנו כאן איזשהו לחצן שמאפשר לנו לאפס את כולם בבת אחת ובואו ניקח פה text clear all בואו ניקח כאן text all caps false נגדיר כאן שהלייאוט גרוויטי סנטר אוריזונטל נמצא לנו באמצע וניתן לו איזה שהוא קליק בטון clear all on click בצורה כזאת

  16. 09:52

    כעת אנחנו רוצים בלחיצה על הלחצן להגדיר שכל הטשקבוקסים האלה יהיו בעלי צ'ק פולס בבת אחת ואנחנו לא רוצים לגשת לאחד אחד ולבצע את זה כי יכול להיות שבהמשך יהיה לנו יותר יכול להיות שיהיה איזשהו טופס שיש בו כבר הרבה אנחנו לא רוצים לעבור אחד אחד אנחנו רוצים לעשות את זה בבת אחת אז מה אנחנו צריכים לעשות אז אנחנו צריכים לעשות את מה שעשינו מקודם בואו ניקח את השורה הזאת נשים אותה פה

  17. 10:25

    ועכשיו אנחנו יודעים כמה ילדים יש ל-Layout, רק אנחנו צריכים להחליף כאן ולאתר את ה-Layout הספציפי שאנחנו מדברים עליו. אז הנה ה-LinearLayout השני, בואו ניתן לו פה ID, נקרא לו Inner, נקרא לו LinearLayoutInner, ניגש ונאתר אותו, LinearLayoutInner, נאתר אותו כאן, כאשר את הקודם אנחנו בכלל לא צריכים,

  18. 11:18

    לא את זה ולא את זה, אז ניפטר מהם. אוקיי, עכשיו מה אנחנו רוצים לעשות? יש לנו כאן את ה-childCount אנחנו רוצים לרוץ בלולאה מ-0 כל עוד i יותר קטן מ-childCount i++ ומה שאנחנו רוצים לעשות אנחנו רוצים לגלות view כלשהו בצורה כזאת אבל אנחנו יודעים שה-view הזה הוא מסוג checkbox

  19. 11:56

    כי בתוכו יש checkbox והוא רק נקרא לזה בשם המתאים ויהיה linear layout inner נשים את זה כאן וכאן ואנחנו יכולים כבר להיפטר מכל הקוד הקודם שהיה רק לצורך הדגמה של שתי הפונקציות האלה get child count שמוביל לי את מספר ה-child שיש בתוך ה-view group ו-get child at שמחזיר לי את ה-view הספציפי בעל האינדקס הזה.

  20. 12:27

    אז אנחנו יכולים כבר כאן לבצע צ'קבוקס ולעשות לו איזשהו קאסטינג לצ'קבוקס. אם יש לנו את הצ'קבוקס אז אנחנו יכולים to set checked false וזה בעצם קוד שרץ על כל הרכיבים הפנימיים של ה-layout הזה ומוריד את כולם ל-false.

  21. 12:52

    בואו נריץ את זה, נסמן חלק מהם, נבצע clear all ואנחנו רואים שהמערכת הורידה אותם בבת אחת, את כולם.

  22. 13:06

    יכול להיות לי פה גם מספר רב של צ'קבוקסים ובבת אחת הורדנו את כולם בגלל שרצנו על ה-view group הזה שעוטף אותם קיבלנו את כל אחד מהם ועשינו עליו איזושהי פעולה דרושה שכרגע זה ביטול ה-v של הצ'קבוקס.

  23. 13:24

    אבל קיימת פה איזושהי בעיה קלה מה קורה אם בתוך ה-layout הזה יש עוד משהו שהוא לא צ'קבוקס לדוגמה בוא ניקח כאן טקסט view ונגדיר שהטקסט שלו זה Web Client.

  24. 13:45

    נניח שזה בעצם רכיבים או שפות תכנות ליתר דיוק שמתעסקות בצד לקוח בעולם ה-Web. בואו רק נגדיר שהטקסט סייז 20 ושיש לנו Layout Gravity Center Horizontal שזה יהיה כזה בדיוק באמצע בצורה כזאת.

  25. 14:13

    עכשיו אם אנחנו באמת מריצים את האפליקציה האם הכל עובד כמו שצריך שימו לב בתוך ה-LinearLayout יש לנו גם טקסט ויו וגם צ'קבוקס בואו נריץ את זה קודם כל נסמן פה מספר v's נלחץ על הלחצן והאפליקציה קורסת הייתה פה איזושהי בעיה במידה והאפליקציה קורסת הדבר הנכון לעשות זה לא לגעת בהודעה

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Main Layout

ההרצאה הבאה: Radio Group

הרצאות קשורות מקורסים אחרים

  • VIEW עם Check
  • Debug View
  • יצירת Group Resources
  • יצירת Partial View

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון