
onCreateView עם LinearLayout בשם linearLayoutRoot שמוחזר בסוף.LinearLayout אנכי ובתוכו שני FrameLayout עם ID נפרדים, אחד לבני ואחד לפאפי. במקום תגית fragment משתמשים בקונטיינרים, כי ההוספה כאן דינמית.savedInstanceState שווה null. רק אז יוצרים את אובייקטי הפרגמנט ומוסיפים אותם, ובשינוי אוריינטציה הם כבר קיימים.getSupportFragmentManager, אלא ל-getChildFragmentManager(). הוא מקביל לו ומאפשר beginTransaction, add, replace, remove, ובסוף commit.BunnyFragment ואת PuppyFragment לקונטיינרים שלהן. לאחר מכן קוראים ל-getChildFragmentManager().executePendingTransactions() כדי לסיים את הטרנזקציות שהתחילו.FrameLayout בשם frameLayoutContainerBunnyPuppy, ויוצרים בקוד את BunnyPuppyFragment ומוסיפים אותה אליו, גם כן רק כש-savedInstanceState הוא null.getChildFragmentManager.הטקסט המלא של הדקות הראשונות בהרצאה «Child Fragment» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
יכול להיות מצב שבו אנחנו נרצה להציב פרגמנט בתוך פרגמנט אחרת. בתרגיל הזה אנחנו הולכים לראות איך בדיוק ניתן לבצע את זה, כי יש פה משהו קצת שונה שאנחנו צריכים להתייחס אליו.
אז יש לנו פה תוכנית שעבדנו איתה באחד הסרטונים האחרונים, שהציג הפרגמנט של בני ופרגמנט של פאפי. המידע שהצגנו כאן היה מידע hardcoded, בבני פשוט הצגנו ממש תמונה של בני, עם טקסט של בני, ובפאפי הצגנו תמונה של כלבלב עם טקסט של פאפי, ואנחנו רוצים עכשיו לקחת את שני הפרגמנט האלה ולהציב אותם בתוך פרגמנט נוספת.
ואז את הפרגמנט הנוספת אנחנו רוצים להציג במיין אקטיביטי. אז איך אנחנו יכולים לבצע את זה? הדבר הראשון שאנחנו הולכים לעשות זה פשוט להוסיף את הפרגמנט הזאת.
אז בואו ניגש לאפ, New Fragment, נוסיף Fragment חדשה, ובואו נקרא לפרגמנט הזאת, Bunny, Puppy, Fragment. נמחק את שני אלה, והנה יש לנו פה Fragment שאמורה להכיל גם Bunny וגם Puppy.
בואו נסדר תחילה את הקוד שלה, נגדיר שיש לנו פה את הקונסטרקטור הזה, ניפטר מזה, ניישר פה טיפה את השורה, נעלה את זה למעלה ונחלק את השורה הזאת לשני חלקים. דבר ראשון, יש לנו כאן איזשהו Linear Layout שאנחנו הולכים לבנות.
Linear Layout, נקרא לו Linear Layout Root. נכניס לתוכו Linear Layout ולבסוף נחזיר אותו. יש לנו פה return, linear layout root, וכאן אנחנו תכף הולכים להמשיך ולשלב את שני הפרגמנטים האחרים.
הדבר הבא שאנחנו רוצים זה לדאוג לlayout עצמו של הפרגמנט. הנה פרגמנט bunny puppy, בואו ניכנס, נגדיר באמת שזה linear layout, ניפטר רגע מזה, ניפטר מזה.
נגדיר שאנחנו orientation-vertical ומה שאנחנו רוצים זה בתוך להגדיר שני קונטיינרים frame-layout אנחנו רוצים שהוא יהיה match-parent וrap-content ואנחנו רוצים לתת לו id שיזהה את הפריים-layout הספציפי הזה זה יהיה frame-layout-container אבל עבור הבני
כמובן שיכלנו במקום זה להשתמש בתגית פרגמנט ופה לא הייתה שום בעיה הבעיה אם אנחנו רוצים לבצע את הקוד הזה בצורה דינמית לכן הדוגמה הזאת הולכת להיות הוספת פרגמנטים דינמיים לתוך פרגמנט אחרת יש לנו פה עוד frame layout וזה יהיה עבור הפאפי כעת מה שאנחנו רוצים לעשות זה בקוד עצמו, וזה בעצם יהיה בתוך
הפרגמנט בני פאפי, בקוד עצמו אנחנו רוצים להוסיף דינמית את שני הפרגמנטס. אז אנחנו קודם כל רוצים לבצע כמו תמיד בדיקה, האם ה-save the instance state שווה null?
רק במידה והוא שווה לנל, אנחנו רוצים בפעם הראשונה ליצור את אובייקטי הפרגמנט ולהוסיף אותם דינמית לפרגמנט הנוכחית שלנו. כאן כמובן אם אנחנו מבצעים orientation change, שינוי אוריינטציה, אז save instant state כבר לא יהיה null ואין לנו צורך לייצר אובייקט חדש ולצרף אותו כי הוא כבר קיים.
מה אנחנו רוצים לעשות? במידה ואנחנו null, ה-saved instant state הוא null ואנחנו בפעם הראשונה מריצים את זה. אנחנו רוצים ליצור אובייקט bunny, אז בואו ניצור bunny fragment, דיר אובייקט חדש, bunny fragment, נקרא ל-get, והפעם אנחנו לא יכולים לקרוא ל-get support fragment manager, כי אנחנו לא בתוך activity, אנחנו נמצאים בתוך fragment, ולכן אנחנו צריכים לקרוא ל-get
child fragment manager, וזה בדיוק השינוי המשמעותי שחשוב היה להראות. יש לנו פונקציה שנקראת GetChildFragmentManager, והיא מקבילה ל-GetSupportFragmentManager, ודרכה אנחנו יכולים to beginTransaction, to add, to replace, to remove, מה שאנחנו רוצים.
אז בואו נקרא ל-R.ID FrameLayout, ואנחנו רוצים את הבני, וניתן לו את אובייקט הבניFragment, ולא לשכוח כמובן לקרוא ל-Commit. בואו נרווח פה טיפה, נשכפל את שתי השורות האלה, Ctrl-C, Ctrl-V, אנחנו רוצים עכשיו ליצור