PracticU

שמירת Fragment State

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

שמירת Fragment State
הרצאה זו משלימה את הקודמת: שמירת אובייקט הפרגמנט לא שומרת את המידע הפנימי שלו, ולכן אחרי שינוי אוריינטציה הפרגמנט חוזרת לתוכן ההתחלתי. כאן שומרים ומשחזרים את ה-state מתוך הפרגמנט עצמה.
השלבים העיקריים
1. שתי פונקציות בתוך הפרגמנט: דורסים את onSaveInstanceState לשמירה ואת onActivityCreated לשחזור (ולא onRestore). בשתיהן משאירים את הקריאה ל-super.
2. העלאה לאזור הגלובלי: כדי שפונקציה אחת תעדכן ואחרת תקרא, מעלים את imageId ו-description למשתנים פרטיים של המחלקה.
3. עדכון מבחוץ: כשמידע חדש נכנס מבחוץ, שומרים אותו ישר במשתנים הגלובליים (this.imageId = imageId, this.description = description), כדי שתמיד יישמר הערך האחרון.
4. שמירה: ב-onSaveInstanceState מכניסים ל-outState את putInt עבור imageId ואת putString עבור description.
5. שחזור: ב-onActivityCreated בודקים ש-savedInstanceState אינו null, מחזירים את הערכים עם getInt ו-getString, וקוראים ל-displayAnimal עם הערכים האלה.
6. בדיקה: בהרצה לוחצים על הלחצן, משנים אוריינטציה, ורואים שגם הטקסט וגם התמונה של Puppy נשמרים. כך זה נשאר בכל שינוי נוסף.
פקודות והגדרות
onSaveInstanceState, onActivityCreated, outState.putInt, outState.putString, savedInstanceState.getInt, savedInstanceState.getString, displayAnimal.
כעת אפשר לגרום לפרגמנט לשמור את המצב האחרון שלה ולשחזר אותו כשהיא נוצרת מחדש.
השיעור הבא בקורס: הרצת Pending Transactions

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

  1. 00:00

    המידע הפנימי שאובד בשינוי אוריינטציה

  2. 00:57

    דריסת onSaveInstanceState ב-Fragment

  3. 01:36

    שחזור המצב ב-onActivityCreated

  4. 02:11

    העברת המידע למשתנים גלובליים

  5. 03:25

    שמירת הערכים ב-outState

  6. 04:06

    שחזור הערכים מ-savedInstanceState

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

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

  1. 00:01

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

  2. 00:14

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

  3. 00:27

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

  4. 00:49

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

  5. 01:05

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

  6. 01:25

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

  7. 01:38

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

  8. 01:59

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

  9. 02:18

    לדוגמה אנחנו נוכל ב-Save Instant State לקחת את המידע ולשמור, ב-Restore או ב-OnActivity Created להחזיר את המידע בכדי שה-Fragment תוכל לעבוד עם המידע הזה.

  10. 02:30

    אז בואו נגדיר כאן Private וזה היה ה-Image ID, בואו ניקח גם את ה-Description, נעשה copy, נגדיר פה private, והנה הדסקריפשן. כאשר אנחנו מכניסים מידע, אנחנו רוצים להכניס את המידע ישירות לדאטה ממברס הגלובליים, בכדי שהמידע הזה יוכל אחר כך להישמר ב-saved instance state.

  11. 03:00

    כאשר משנים את המידע הזה מבחוץ, גם כאן אנחנו רוצים להכניס את ה-change למשתנים הגלובליים. בואו ניגש ל-this-image-id, שווה ל-image-id, this-description שווה ל-description, ואז זה מאפשר לנו שגם אם העולם החיצון ישנה מתישהו את המידע, אז המידע העדכני נשמר באזור הגלובלי, ואז אם מתבצע שינוי אוריינטציה,

  12. 03:32

    אנחנו שומרים את המידע העדכני. בשינוי האוריינטציה, אנחנו רוצים לגשת ל-out-state, ופשוט to put values, להכניס את האינטג'ר ולהכניס את הדסקריפשן.

  13. 03:45

    בואו נגדיר אותו כ-image ID, image ID זה המשתנה הגלובלי, out state put string הפעם, זה היה description, ונכניס את הדסקריפשן, וכמובן ב-on activity created, אנחנו רוצים לבצע קודם כל בדיקה, האם ה-saved instant state הוא לא null?

  14. 04:14

    אם ה-saved instant state אינו null, אז אנחנו רוצים לשחזר את המידע. אז קודם כל בואו נחזיר אותו למשתנים הגלובליים. imageId, saved instant state, get int.

  15. 04:27

    הקוד שלו היה imageId, כלומר נפתח.

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

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

ההרצאה הבאה: הרצת Pending Transactions

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

  • הבדלים בין CC State לבין FC State
  • שמירת Payload מוצפן
  • Distance-Vector vs Link-State
  • שמירת ערך חוזר מהשרת

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

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