PracticU

שמירת Fragment Instance

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

שמירת Fragment Instance
יש דרך נוספת לשחזר את אובייקט הפרגמנט אחרי שינוי אוריינטציה, מלבד findFragmentById: שמירה ושחזור שלו דרך ה-state של האקטיביטי.
איך שומרים ומשחזרים
1. השיטה הקודמת: ה-if-else ב-onCreate יוצר את הפרגמנט בהרצה ראשונה בלבד, וב-else מחזיר את הפרגמנט שעל האקטיביטי לאובייקט הגלובלי.
2. שתי פונקציות לדרוס: onSaveInstanceState נקראת רגע לפני שינוי ה-configuration, ו-onRestoreInstanceState משחזרת את מה ששמרנו.
3. הבעיה: ל-outState יש putString, putInt, putDouble ועוד, וגם putSerializable ו-putParcelable, אבל פרגמנט אינו Serializable ואינו Parcelable, ולכן אי אפשר לשמור אותו כך.
4. השמירה: ב-onSaveInstanceState קוראים ל-getSupportFragmentManager().putFragment(outState, key, fragment). מקובל לתת למפתח את שם אובייקט הפרגמנט.
5. השחזור: ב-onRestoreInstanceState בודקים ש-savedInstanceState אינו null, ואז מכניסים ל-animalFragment את התוצאה של getFragment(savedInstanceState, key) עם casting.
6. ניקוי: אפשר היה לשים את השחזור גם ב-else, אבל המרצה מעדיף לדרוס את שתי הפונקציות ולהוריד את ה-else.
שימו לב
- חובה להשאיר את הקריאות ל-super ב-onSave וב-onRestore. בלעדיהן התוכנית לא תעבוד כמו שצריך ואף תקרוס.
- putFragment ו-getFragment שומרות רק את האינסטנס, כלומר את האובייקט עצמו. המידע הפנימי של הפרגמנט לא נשמר: אחרי לחיצה על הלחצן ושינוי אוריינטציה נוסף, התוכן חזר מ-Puppy ל-בני. שמירת ה-state הפנימי נעשית בתוך הפרגמנט, וזה הנושא של ההרצאה הבאה.
כעת אפשר לשמור ולשחזר את אובייקט הפרגמנט עם putFragment ו-getFragment.
השיעור הבא בקורס: שמירת Fragment State

פרקי ההרצאה: שמירת Fragment Instance

  1. 00:00

    יצירת Fragment פעם אחת ב-onCreate

  2. 00:43

    onSaveInstanceState ו-onRestoreInstanceState

  3. 02:02

    למה אי אפשר לשמור Fragment ב-outState

  4. 02:58

    שמירה עם putFragment

  5. 03:34

    שחזור עם getFragment

תמלול ההרצאה: שמירת Fragment Instance

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

  1. 00:07

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

  2. 00:28

    ואם לדוגמה יוזר מבצע orientation change, אז ה-if לא יתבצע, ה-else יתבצע, ואנחנו מעטרים את הפרגמנט שנמצאת על האקטיביטי, מחזירים אותה לאובייקט הפרגמנט הגלובלי, בכדי שנוכל להמשיך להשתמש איתו במהלך חיי האפליקציה.

  3. 00:46

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

  4. 01:22

    של דברים כאשר ה-configuration change, לדוגמה כאשר ה-orientation משתנה, אנחנו יכולים לבצע פה שמירה מסוימת ובפונקציה שנקראת onRestoreInstanceState אנחנו בעצם רוצים להחזיר את ה-state ששמרנו ודרך שתי הפונקציות האלה גם יש לנו אפשרות לבצע שמירה והחזרה של הפרגמנט במקום האלס הזה

  5. 01:53

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

  6. 02:09

    השמירה מתבצעת על ידי ה-out state. וה-out state מכיל כל מיני פונציות שמאפשרות להכניס מידע. לדוגמה string, לדוגמה int, לדוגמה put double וכדומה אבל אין פונקציה שנקראת put fragment בכדי לשמור אובייקט יש לנו שתי פונקציות put serializable אם כמובן המחלקה ממשה interface serializable וput parcelable אם המחלקה

  7. 02:41

    ממשה interface parcelable fragment היא לא serializable ולא parcelable זאת אומרת שאנחנו לא יכולים להשתמש ב-out state בכדי לבצע שמירה של הפרגמנט.

  8. 02:56

    אז איך בכל זאת אנחנו יכולים לשמור את הפרגמנט ולשחזר אותה? על ידי getSupportFragmentManager. יש לנו פונקציה שנקראת putFragment. כאן אנחנו נותנים את ה-out state.

  9. 03:13

    אנחנו נותנים איזשהו מפתח. מה שמקובל לעשות זה שהשם של המפתח יהיה השם של אובייקט הפרגמנט בואו נעשה copy-paste והפרמטר הבא ואת אובייקט הפרגמנט שאנחנו רוצים לבצע שמירה לגביו ואז putFragment מה שתעשה זה תדע איך להכניס את אובייקט הפרגמנט הזה בעצמה לתוך ה-out state זה בעצם השמירה עצמה בפונקציה onSave

  10. 03:40

    שמתבצעת שנייה לפני שהאוריינטיישן משתנה והאקטיביטי מאבדת את המידע שלה מה אנחנו רוצים לעשות ב-onRestoreInstanceState? אנחנו רוצים קודם כל לבצע בדיקה האם ה-savedInstanceState שקיבלנו הוא לא null מפני שגם בהרצאה הראשונה הפונקציה הזאת יכולה להתבצע ושם אנחנו לא רוצים לשלוף את הפרגמנט אז בואו ניגש לאובייקט

  11. 04:10

    הפרגמנט, AnimalFragment ונכניס לתוכו casting של Animal Fragment נקרא ל-Get Support Fragment Manager ונקרא לפונקציה Get Fragment בדיוק כמו שיש לנו Put Fragment יש לנו Get Fragment ניתן את ה-Saved Instant State שכבר מכיל את אובייקט הפרגמנט

  12. 04:32

    ואת השם של הפרגמנט ששמרנו שזה היה Animal Fragment נעתיק, נדביק וזה בעצם הקוד שמשחזר את הפרגמנט יכלנו לקחת את השורה הזאת ולשים אותה כאן ב-else במקום לבצע את הפונקציה של ה-on-restore זה גם כן היה בסדר וזה היה אותו הדבר מפני שה-saved instant state הזה שאנחנו רואים כאן

  13. 05:01

    זה בדיוק ה-saved instant state הזה אם הוא שונה מנהל אנחנו יכולים לשחזר את הפרגמנט

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

ההרצאה הקודמת: Find Fragment By ID

ההרצאה הבאה: שמירת Fragment State

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

  • Instance of Driver
  • Instance Templates
  • הרצאה על SQL Managed Instance
  • שמירת Payload מוצפן

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

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