
onClick (Add, Replace, Remove) ו-FrameLayout בשם frameLayoutContainer שיכיל את הפרגמנט. נהוג להשתמש ב-FrameLayout כי הוא מציג בדרך כלל רכיב אחד.bunnyFragment ו-puppyFragment, כדי שכל הלחצנים יוכלו להתייחס אליהם.BunnyFragment חדשה, משיגים FragmentManager, קוראים ל-beginTransaction() ומקבלים FragmentTransaction, קוראים ל-add(R.id.frameLayoutContainer, bunnyFragment) ולבסוף חייבים commit().getSupportFragmentManager().beginTransaction().add(...).commit() נותן את אותה תוצאה.PuppyFragment חדשה וקוראים ל-replace עם ה-ID של הקונטיינר והפרגמנט החדשה, ואז commit. אם אין עדיין פרגמנט בקונטיינר, replace מתנהגת כמו add.remove מקבלת רק את אובייקט הפרגמנט להסרה, ואחריה commit, והפרגמנט נעלמת מהקונטיינר.getSupportFragmentManager משמש לפרגמנט מספריית android.support.v4, ואילו getFragmentManager לפרגמנט הישנה מהחבילה android.app.FragmentTransaction חייב להגיע מספריית ה-support. חבילה לא נכונה גורמת לשגיאות קומפילציה שאינן ברורות.commit הטרנזקציה לא מתבצעת.FragmentManager.הטקסט המלא של הדקות הראשונות בהרצאה «שימוש ב-Fragment בצורה דינמית בקוד» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שראינו איך אנחנו יכולים לצרף פרגמנט ולהציג אותה על ידי תגית פרגמנט בקוד, ב-XML הכוונה, אנחנו הולכים לראות איך אנחנו יכולים לעשות את זה אבל בצורה דינמית.
ולמעשה להוסיף פרגמנט בצורה דינמית יהיה משהו הרבה יותר נפוץ והרבה יותר שימושי לביצוע מאשר הצגת פרגמנט סטטית. כי אנחנו הרבה פעמים רוצים תוך כדי האפליקציה להציג פרגמנט, להחליף אותה, להסיר אותה, להציג פרגמנט אחרת, זה משהו שקורה הרבה.
אז בואו נראה איך אנחנו יכולים לעשות את זה. אז קודם כל לא יהיה לנו כאן שום תגית פרגמנט. בואו ניפטר משתי התגיות פרגמנט שיש לנו כאן. ניפטר גם מהטקסט הזה של ה-Cute Animals ונציג במקומו לחצנים.
בואו נציג button, match parent, wrap content, נגדיר text all size false, נגדיר text size, איזה שהוא גודל, נגדיר text, ואנחנו רוצים שהלחצן הראשון יאפשר לבצע הוספה.
בואו ניגש ונגדיר on click, button add on click, נייצר את האירוע ונשכפל את הלחצן הזה לעוד שני לחצנים. לחצן נוסף יהיה עבור REPLACE, נגדיר כאן REPLACE, נייצר אירוע REPLACE, והלחצן השלישי עבור REMOVE, נגדיר כאן REMOVE, נייצר אירוע, ויש לנו עכשיו שלושה לחצנים שיאפשרו להוסיף דינמית, להחליף פרגמנט ולמחוק פרגמנט.
עכשיו אנחנו צריכים להחליט איפה אנחנו רוצים לראות את הפרגמנט כאשר אנחנו מציגים אותה בצורה דינמית. כאן אנחנו צריכים להוסיף איזה שהוא layout.
אנחנו יכולים להוסיף כל layout שאנחנו רוצים, נהוג שזה יהיה frame layout. כי frame layout אומר אני בדרך כלל מציג רכיב אחד איפה שאני נמצא באמצע. אז בואו נגדיר כאן wrap content, נגדיר האמת שנים wrap content, ניתן איזשהו id, ונגדיר frame layout container.
למה frame layout container? כי הוא הולך להכיל את הפרגמנט בצורה דינמית. וזה כל מה שאנחנו רוצים להגדיר ב-UI. שלושה לחצנים שמאפשרים לשלוט על הפרגמנט בצורה דינמית.
כעת אנחנו הולכים לקוד שלנו, ואנחנו רוצים בתוך הקוד לבצע הוספה, החלפה ומחיקה של פרגמנט. אנחנו צריכים object fragment, בגלל שאנחנו רוצים להתייחס לאובייקטים האלה משלושת לחצנים, בואו נגדיר אותם פה באזור הגלובלי.
נגדיר private, הפרגמנט הראשונה הייתה bunny fragment, נגדיר את הפרגמנט השנייה שהייתה puppy fragment, והנה יש לנו שני אובייקטים עבור הפרגמנט, או ליתר דיוק שני רפרנסים, שכבר אנחנו הולכים ליצור אובייקטים.
כאשר אנחנו רוצים לבצע הוספה, בואו ניגש לבני פרגמנט, ונייצר אובייקט חדש, new, בני פרגמנט, בצורה כזאת. עכשיו אנחנו רוצים לקחת את האובייקט הזה, שהוא כבר פרגמנט אמיתית, ואנחנו רוצים להוסיף אותו לקונטיינר שבנינו.
אז אנחנו צריכים לייצר אובייקט מטיפוס FragmentManager. בשביל לייצר ObjectFragmentManager יש לנו את הפונקציה GetFragmentManager ששייכת לאקטיביטי, והיא מחזירה לנו ObjectFragmentManager בכדי לטפל בפרגמנט, אבל פרגמנטים ישנים יותר, כלומר מהמחלקה פרגמנט הישנה יותר שבסרטון
הקודם ראינו שמגיעה מפקאג' שהיה App או ליתר דיוק AndroidFragment. אם אנחנו רוצים לטפל בפרגמנט החדשה יותר שמגיעה מ-Android Support VR באפ פרגמנט, אז אנחנו לא משתמשים ב-Get Fragment Manager, אלא ב-Get Support Fragment Manager.
זאת נקודה חשובה, כי לפעמים קורה שקיימת איזושהי פרגמנט בנויה כבר במערכת, אבל היא נבנתה על ידי הפרגמנט הישנה ואנחנו נצטרך את getFragmentManager ולא getSupportFragmentManager.
אבל לרוב זה יהיה getSupportFragmentManager. מה זה FragmentManager? זה בעצם אובייקט שבעזרתו אנחנו יכולים לבצע את הניהול הדינמי של פרגמנט, להוסיף, להחליף, להסיר ועוד דברים.
אז מה הדבר הבא שאנחנו עושים? בפרגמנט מנג'ר יש לנו פונקציה שנקראת Begin Transaction. הפונקציה Begin Transaction מחזירה לנו אובייקט מסוג Fragment Transaction.
אז בואו נייצר פה Fragment Transaction, ונקבל את האובייקט בחזרה.