PracticU

Child Fragment

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Child Fragment
מילון מושגים:
Fragment - ב-Android, רכיב ממשק הניתן לשימוש חוזר בתוך Activity, שמייצג חלק ממסך או התנהגות.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
תגית - סימון בקוד, למשל ב-HTML, שתוחם רכיב ומגדיר את תפקידו או תכונותיו. גם תווית לסימון וקיטלוג פריטים.

Child Fragment
אפשר להציב פרגמנט בתוך פרגמנט אחרת. ההרצאה לוקחת אפליקציה שמציגה פרגמנט של בני ופרגמנט של פאפי, ומציבה את שניהם דינמית בתוך פרגמנט שלישית, שמוצגת במיין אקטיביטי.
השלבים העיקריים
1. פרגמנט עוטפת: מוסיפים פרגמנט חדשה בשם BunnyPuppyFragment, ומשאירים את ה-onCreateView עם LinearLayout בשם linearLayoutRoot שמוחזר בסוף.
2. ה-layout שלה: LinearLayout אנכי ובתוכו שני FrameLayout עם ID נפרדים, אחד לבני ואחד לפאפי. במקום תגית fragment משתמשים בקונטיינרים, כי ההוספה כאן דינמית.
3. בדיקת הרצה ראשונה: בקוד בודקים אם savedInstanceState שווה null. רק אז יוצרים את אובייקטי הפרגמנט ומוסיפים אותם, ובשינוי אוריינטציה הם כבר קיימים.
4. ההבדל המרכזי: בתוך פרגמנט לא קוראים ל-getSupportFragmentManager, אלא ל-getChildFragmentManager(). הוא מקביל לו ומאפשר beginTransaction, add, replace, remove, ובסוף commit.
5. הוספת שתי הילדות: מוסיפים את BunnyFragment ואת PuppyFragment לקונטיינרים שלהן. לאחר מכן קוראים ל-getChildFragmentManager().executePendingTransactions() כדי לסיים את הטרנזקציות שהתחילו.
6. המיין אקטיביטי: מוסיפים FrameLayout בשם frameLayoutContainerBunnyPuppy, ויוצרים בקוד את BunnyPuppyFragment ומוסיפים אותה אליו, גם כן רק כש-savedInstanceState הוא null.
הרצה מראה את שני הפרגמנטים הפנימיים (child fragments) בתוך הפרגמנט החיצונית.
כעת אפשר להציב פרגמנט בתוך פרגמנט באמצעות getChildFragmentManager.
השיעור הבא בקורס: List Fragment

פרקי ההרצאה: Child Fragment

  1. 00:00

    הצבת Fragment בתוך Fragment אחר

  2. 01:01

    יצירת BunnyPuppyFragment

  3. 02:03

    Layout עם שני FrameLayout

  4. 03:24

    הוספת Fragments דינמית בקוד

  5. 04:23

    שימוש ב-getChildFragmentManager

תמלול ההרצאה: Child Fragment

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

  1. 00:08

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

  2. 00:23

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

  3. 00:56

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

  4. 01:08

    אז בואו ניגש לאפ, New Fragment, נוסיף Fragment חדשה, ובואו נקרא לפרגמנט הזאת, Bunny, Puppy, Fragment. נמחק את שני אלה, והנה יש לנו פה Fragment שאמורה להכיל גם Bunny וגם Puppy.

  5. 01:29

    בואו נסדר תחילה את הקוד שלה, נגדיר שיש לנו פה את הקונסטרקטור הזה, ניפטר מזה, ניישר פה טיפה את השורה, נעלה את זה למעלה ונחלק את השורה הזאת לשני חלקים. דבר ראשון, יש לנו כאן איזשהו Linear Layout שאנחנו הולכים לבנות.

  6. 01:52

    Linear Layout, נקרא לו Linear Layout Root. נכניס לתוכו Linear Layout ולבסוף נחזיר אותו. יש לנו פה return, linear layout root, וכאן אנחנו תכף הולכים להמשיך ולשלב את שני הפרגמנטים האחרים.

  7. 02:15

    הדבר הבא שאנחנו רוצים זה לדאוג לlayout עצמו של הפרגמנט. הנה פרגמנט bunny puppy, בואו ניכנס, נגדיר באמת שזה linear layout, ניפטר רגע מזה, ניפטר מזה.

  8. 02:33

    נגדיר שאנחנו orientation-vertical ומה שאנחנו רוצים זה בתוך להגדיר שני קונטיינרים frame-layout אנחנו רוצים שהוא יהיה match-parent וrap-content ואנחנו רוצים לתת לו id שיזהה את הפריים-layout הספציפי הזה זה יהיה frame-layout-container אבל עבור הבני

  9. 03:06

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

  10. 03:36

    הפרגמנט בני פאפי, בקוד עצמו אנחנו רוצים להוסיף דינמית את שני הפרגמנטס. אז אנחנו קודם כל רוצים לבצע כמו תמיד בדיקה, האם ה-save the instance state שווה null?

  11. 03:51

    רק במידה והוא שווה לנל, אנחנו רוצים בפעם הראשונה ליצור את אובייקטי הפרגמנט ולהוסיף אותם דינמית לפרגמנט הנוכחית שלנו. כאן כמובן אם אנחנו מבצעים orientation change, שינוי אוריינטציה, אז save instant state כבר לא יהיה null ואין לנו צורך לייצר אובייקט חדש ולצרף אותו כי הוא כבר קיים.

  12. 04:12

    מה אנחנו רוצים לעשות? במידה ואנחנו null, ה-saved instant state הוא null ואנחנו בפעם הראשונה מריצים את זה. אנחנו רוצים ליצור אובייקט bunny, אז בואו ניצור bunny fragment, דיר אובייקט חדש, bunny fragment, נקרא ל-get, והפעם אנחנו לא יכולים לקרוא ל-get support fragment manager, כי אנחנו לא בתוך activity, אנחנו נמצאים בתוך fragment, ולכן אנחנו צריכים לקרוא ל-get

  13. 04:43

    child fragment manager, וזה בדיוק השינוי המשמעותי שחשוב היה להראות. יש לנו פונקציה שנקראת GetChildFragmentManager, והיא מקבילה ל-GetSupportFragmentManager, ודרכה אנחנו יכולים to beginTransaction, to add, to replace, to remove, מה שאנחנו רוצים.

  14. 05:05

    אז בואו נקרא ל-R.ID FrameLayout, ואנחנו רוצים את הבני, וניתן לו את אובייקט הבניFragment, ולא לשכוח כמובן לקרוא ל-Commit. בואו נרווח פה טיפה, נשכפל את שתי השורות האלה, Ctrl-C, Ctrl-V, אנחנו רוצים עכשיו ליצור

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

ההרצאה הקודמת: הרצת Pending Transactions

ההרצאה הבאה: List Fragment

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

  • הקמת תת-דומיין - Child Domain - חלק 1
  • שימוש ב-Fragment ב-React

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

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