Fragment
קטע במסך שניתן לעצב אותו כרצוננו ולשים בו כל אלמנט מסוג view, נתייחס אליו כמסך לכל דבר.
השימושים הנפוצים של Fragment
במקום ליצור כמה מסכים ולעבור ביניהם – ניצור מסך אחד שבתוכו יהיה מיכל כך שבכל פעם שנצטרך נשים בו Fragment אחר על פי בחירת המשתמש.
כאן מוצג אותו מסך כך שבכל פעם מופיע בו קטע (fragment) שונה במקום שני מסכים שונים.
ניתן באותו מסך לשים מספר fragments ובכך לחלק את המסך לכמה קטעים. השליטה על כל fragment תהיה בתוך ה fragment בדומה לשליטה על אקטיביטי.
תוספות
2. נכנסים ל build.gradle
מוסיפים בתוך dependencies
3. לוחצים על sync
יצירת Fragment
2. ניצור קובץ resource layout חדש שבו נעצב את ה
fragment כרצוננו.
3. בתוך המחלקה של ה fragment נממש את הפעולה onCreateView שתופעל כאשר ה fragment נוצר. היא תחזיר לנו view חדש מנופח לפי ה layout שבנינו. השליטה על ה fragment (הוספת מאזינים ומימושם, הודעות, העברת נתונים ל fragment אחר, שליפת נתונים וכו') מתבצעת בתוך הפעולה הזו.
יצירת האקטיביטי שבתוכו יהיה ה Fragment
נוסיף לקובץ ה xml של האקטיביטי FragmentContainerView במקום הרצוי ונגדיר לו id, גודל, מיקום במסך וכו'. במידה ונרצה לחלק את המסך לקטעים שונים נוסיף FragmentContainerView כמספר הקטעים שנרצה.
אם ברצוננו רק לחלק את המסך לקטעים ללא צורך להחליף בין Fragments באותו מיכל ((container. ניתן לקשר בין ה FragmentContainerView ל Fragment הרצוי כבר בקובץ ה xml ללא צורך בניהול ה container בתוך האקטיביטי.
אם נרצה להשתמש ב fragment מתחלף נצטרך לנהל אותו בתוך האקטיביטי שבו ה fragments מוצגים.
ניהול Fragment מתחלף
כאשר נרצה להשתמש באותו FragmentContainerView ל fragments שונים כך שבכל פעם נחליף ל fragment אחר, עלינו להשתמש בעצם מסוג FragmentManager.
עצם מסוג FragmentManager פועל כרשימה של Fragments,מוסיפים לו את כל ה fragments שנרצה להשתמש בהם ודרכו ניתן להחליף fragment בכל שלב.
פעולות נפוצות ב FragmentManager
שם הפעולה | תיאור הפעולה |
beginTransaction() | פתיחת פרוטוקול לביצוע פעולות חובה להפעיל פעולה זו לפני כל פעולה שנרצה לבצע |
setReorderingAllowed(Boolean b) | הפעולה מאפשרת עריכה ע"י שליחת true כפרמטר. נפעיל אותה אחרי פתיחת פרוטוקול לצורך ביצוע שינויים. |
Add(…) | הוספת fragment לרשימת ה fragments שה FragmentManager מנהל |
Replace(….) | החלפת ה fragment שמוצג לאחד אחר |
Commit() | בצע. נפעיל פעולה זו לאחר כל פקודה שנרצה ש FragmentManager יבצע |
דוגמה 1
העברת נתונים מ fragment אחד לשני כמו ב startActivity ללא ציפייה לתשובה
מופיע מייד עם יצירת ה MainActivity
לאחר מילוי הפרטים ולחיצה על send עוברים ל ExampleFragment2 ושולחים לו את השם שהוזן ואת האימייל.
ExampleFragment1
מגיעים ל fragment הזה לאחר ExampleFragment1 ומציגים למשתמש הודעה למעלה עם השם שלו שנשלף מהזנת הנתונים ע"י ExampleFragment1. לאחר הכנסת המייל פעם נוספת ולחיצה על כפתור confirm תופיע הודעה האם האימייל תקין או לא.
ExampleFragment2
יצירת ExampleFragment1
בבנאי מקשרים ל layout המתאים
בפעולה onCreateView מנפחים את ה inflater שיתאים לקובץ ה xml המתאים ומוסיפים לכפתור מאזין שמעביר את הנתונים ל fragment השני
ניפוח ה inflater
והצבת מצביעים
הוספת מאזין לכפתור
העברת הנתונים ל fragment השני ע"י עצם מסוג Bundle
החלפה ל fragment השני דרך ה FragmentManager שהגדרנו ב MainActivity
יצירת ExampleFragment2
בבנאי מקשרים ל layout המתאים
בפעולה onCreateView מנפחים את ה inflater שיתאים לקובץ ה xml המתאים, מכניסים ל TextView שבראש הדף את ההודעה hello עם שם המשתמש ומוסיפים לכפתור מאזין ששולף את הנתונים מ fragment 1, בודק שוויון בין האימיילים ומקפיץ הודעה מתאימה.
ניפוח ה inflater
והצבת מצביעים
שליפת הנתונים שנשלחו מה fragment הקודם ע"י עצם מסוג Bundle
בדיקת תקינות אימות אימייל
ניהול Fragments MainActivity ב
נגדיר בקובץ ה xml של MainActivity
FragmentContainer שבתוכו נשים כל פעם את ה Fragment הרצוי
יצירת מצביע ל
FragmentContainer
יצירת עצם מסוג
FragmentManager שדרכו ננהל את החלפת ה fragments
בקשה לשימוש ב FragmentManager
פתיחת פרוטוקול והצבת ה fragment הרצוי
דוגמה 2
העברת נתונים מ fragment אחד לשני כמו ב registerActivityForResult
עם ציפייה לתשובה
Fragment1
זהו ה fagment הראשון שמופיע בהרצת האפליקציה.
בלחיצה על הכפתור עוברים ל FragmentBmi.
בחזרה לכאן מציגים את ה bmi שחושב בתוספת הערה.
כפתור למעבר לחישוב bmi
FragmentBmi
המשתמש מכניס את הנתונים ולאחר לחיצה על הכפתור מחושב ה bmi והתוצאה נשלחת לfragment1
ניהול ה fragments ב MainActivity
הוספת fragments ל fragmentManager והגדרת fragment1 כ fragment הראשון שיוצג
בתוך הפעולה onCreate מוסיפים מאזין להחלפת fragment ב FragmentManager שהוגדר בתוך ה MainActivity
Fragment1
קבלת גישה ל FragmentManager שהוגדר ב MainActivity
הוספת המאזין
מימוש הפעולה onFragmentResult והגדרה מה לעשות עם התוצאה
בפעולה onCreateView בהאזנה לכפתור נעבור ל FragmentBmi וכתוצאה מכך יופעל המאזין שיצרנו.
מעבר ל FragmentBmi
�ב BmiFragment נחשב את ה bmi, נשלח את התוצאה ע"י bundle ונפעיל את Fragment1 חזרה.
BmiFragment
שליפת הנתונים וחישוב ה bmi
הכנסת התוצאה לעצם מסוג bundle
שליחת הנתונים ע"י הפעלת הפעולה setFragmentResult
מעבר חזרה ל Fragment1