1 of 30

Fragment

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

2 of 30

השימושים הנפוצים של Fragment

3 of 30

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

4 of 30

כאן מוצג אותו מסך כך שבכל פעם מופיע בו קטע (fragment) שונה במקום שני מסכים שונים.

5 of 30

ניתן באותו מסך לשים מספר fragments ובכך לחלק את המסך לכמה קטעים. השליטה על כל fragment תהיה בתוך ה fragment בדומה לשליטה על אקטיביטי.

6 of 30

תוספות

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

2. נכנסים ל build.gradle

מוסיפים בתוך dependencies

3. לוחצים על sync

7 of 30

יצירת Fragment

  1. ניצור מחלקה חדשה שתירש מ Fragment

2. ניצור קובץ resource layout חדש שבו נעצב את ה

fragment כרצוננו.

8 of 30

3. בתוך המחלקה של ה fragment נממש את הפעולה onCreateView שתופעל כאשר ה fragment נוצר. היא תחזיר לנו view חדש מנופח לפי ה layout שבנינו. השליטה על ה fragment (הוספת מאזינים ומימושם, הודעות, העברת נתונים ל fragment אחר, שליפת נתונים וכו') מתבצעת בתוך הפעולה הזו.

9 of 30

יצירת האקטיביטי שבתוכו יהיה ה Fragment

נוסיף לקובץ ה xml של האקטיביטי FragmentContainerView במקום הרצוי ונגדיר לו id, גודל, מיקום במסך וכו'. במידה ונרצה לחלק את המסך לקטעים שונים נוסיף FragmentContainerView כמספר הקטעים שנרצה.

10 of 30

אם ברצוננו רק לחלק את המסך לקטעים ללא צורך להחליף בין Fragments באותו מיכל ((container. ניתן לקשר בין ה FragmentContainerView ל Fragment הרצוי כבר בקובץ ה xml ללא צורך בניהול ה container בתוך האקטיביטי.

11 of 30

אם נרצה להשתמש ב fragment מתחלף נצטרך לנהל אותו בתוך האקטיביטי שבו ה fragments מוצגים.

12 of 30

ניהול Fragment מתחלף

כאשר נרצה להשתמש באותו FragmentContainerView ל fragments שונים כך שבכל פעם נחליף ל fragment אחר, עלינו להשתמש בעצם מסוג FragmentManager.

עצם מסוג FragmentManager פועל כרשימה של Fragments,מוסיפים לו את כל ה fragments שנרצה להשתמש בהם ודרכו ניתן להחליף fragment בכל שלב.

13 of 30

פעולות נפוצות ב FragmentManager

שם הפעולה

תיאור הפעולה

beginTransaction()

פתיחת פרוטוקול לביצוע פעולות

חובה להפעיל פעולה זו לפני כל פעולה שנרצה לבצע

setReorderingAllowed(Boolean b)

הפעולה מאפשרת עריכה ע"י שליחת true כפרמטר.

נפעיל אותה אחרי פתיחת פרוטוקול לצורך ביצוע שינויים.

Add(…)

הוספת fragment לרשימת ה fragments שה FragmentManager מנהל

Replace(….)

החלפת ה fragment שמוצג לאחד אחר

Commit()

בצע. נפעיל פעולה זו לאחר כל פקודה שנרצה ש FragmentManager יבצע

14 of 30

דוגמה 1

העברת נתונים מ fragment אחד לשני כמו ב startActivity ללא ציפייה לתשובה

15 of 30

מופיע מייד עם יצירת ה MainActivity

לאחר מילוי הפרטים ולחיצה על send עוברים ל ExampleFragment2 ושולחים לו את השם שהוזן ואת האימייל.

ExampleFragment1

16 of 30

מגיעים ל fragment הזה לאחר ExampleFragment1 ומציגים למשתמש הודעה למעלה עם השם שלו שנשלף מהזנת הנתונים ע"י ExampleFragment1. לאחר הכנסת המייל פעם נוספת ולחיצה על כפתור confirm תופיע הודעה האם האימייל תקין או לא.

ExampleFragment2

17 of 30

יצירת ExampleFragment1

בבנאי מקשרים ל layout המתאים

18 of 30

בפעולה onCreateView מנפחים את ה inflater שיתאים לקובץ ה xml המתאים ומוסיפים לכפתור מאזין שמעביר את הנתונים ל fragment השני

ניפוח ה inflater

והצבת מצביעים

הוספת מאזין לכפתור

העברת הנתונים ל fragment השני ע"י עצם מסוג Bundle

החלפה ל fragment השני דרך ה FragmentManager שהגדרנו ב MainActivity

19 of 30

יצירת ExampleFragment2

בבנאי מקשרים ל layout המתאים

20 of 30

בפעולה onCreateView מנפחים את ה inflater שיתאים לקובץ ה xml המתאים, מכניסים ל TextView שבראש הדף את ההודעה hello עם שם המשתמש ומוסיפים לכפתור מאזין ששולף את הנתונים מ fragment 1, בודק שוויון בין האימיילים ומקפיץ הודעה מתאימה.

ניפוח ה inflater

והצבת מצביעים

שליפת הנתונים שנשלחו מה fragment הקודם ע"י עצם מסוג Bundle

בדיקת תקינות אימות אימייל

21 of 30

ניהול Fragments MainActivity ב

22 of 30

נגדיר בקובץ ה xml של MainActivity

FragmentContainer שבתוכו נשים כל פעם את ה Fragment הרצוי

23 of 30

יצירת מצביע ל

FragmentContainer

יצירת עצם מסוג

FragmentManager שדרכו ננהל את החלפת ה fragments

בקשה לשימוש ב FragmentManager

פתיחת פרוטוקול והצבת ה fragment הרצוי

24 of 30

דוגמה 2

העברת נתונים מ fragment אחד לשני כמו ב registerActivityForResult

עם ציפייה לתשובה

25 of 30

Fragment1

זהו ה fagment הראשון שמופיע בהרצת האפליקציה.

בלחיצה על הכפתור עוברים ל FragmentBmi.

בחזרה לכאן מציגים את ה bmi שחושב בתוספת הערה.

כפתור למעבר לחישוב bmi

26 of 30

FragmentBmi

המשתמש מכניס את הנתונים ולאחר לחיצה על הכפתור מחושב ה bmi והתוצאה נשלחת לfragment1

27 of 30

ניהול ה fragments ב MainActivity

הוספת fragments ל fragmentManager והגדרת fragment1 כ fragment הראשון שיוצג

28 of 30

בתוך הפעולה onCreate מוסיפים מאזין להחלפת fragment ב FragmentManager שהוגדר בתוך ה MainActivity

Fragment1

קבלת גישה ל FragmentManager שהוגדר ב MainActivity

הוספת המאזין

מימוש הפעולה onFragmentResult והגדרה מה לעשות עם התוצאה

29 of 30

בפעולה onCreateView בהאזנה לכפתור נעבור ל FragmentBmi וכתוצאה מכך יופעל המאזין שיצרנו.

מעבר ל FragmentBmi

30 of 30

�ב BmiFragment נחשב את ה bmi, נשלח את התוצאה ע"י bundle ונפעיל את Fragment1 חזרה.

BmiFragment

שליפת הנתונים וחישוב ה bmi

הכנסת התוצאה לעצם מסוג bundle

שליחת הנתונים ע"י הפעלת הפעולה setFragmentResult

מעבר חזרה ל Fragment1