
onSaveInstanceState לשמירה ואת onActivityCreated לשחזור (ולא onRestore). בשתיהן משאירים את הקריאה ל-super.imageId ו-description למשתנים פרטיים של המחלקה.this.imageId = imageId, this.description = description), כדי שתמיד יישמר הערך האחרון.onSaveInstanceState מכניסים ל-outState את putInt עבור imageId ואת putString עבור description.onActivityCreated בודקים ש-savedInstanceState אינו null, מחזירים את הערכים עם getInt ו-getString, וקוראים ל-displayAnimal עם הערכים האלה.onSaveInstanceState, onActivityCreated, outState.putInt, outState.putString, savedInstanceState.getInt, savedInstanceState.getString, displayAnimal.הטקסט המלא של הדקות הראשונות בהרצאה «שמירת Fragment State» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם שמרנו את האינסטנס של הפרגמנט, כלומר את האובייקט של הפרגמנט, כך שכאשר היוזר ביצע שינוי אוריינטציה, יכלנו לקבל בחזרה את אובייקט הפרגמנט בכדי להמשיך לעבוד איתו.
אבל מה שלא שמרנו זה את ה-state עצמו של הפרגמנט, כלומר את המידע הפנימי שהיה קיים בתוך הפרגמנט. ולכן כאשר הרצנו את האפליקציה, אז ראינו שיש לנו פה פרגמנט.
כאשר ביצענו שינוי אוריינטציה ראינו שהפרגמנט לא משתכפלת והכל בסדר, כאשר לחצנו על הלחצן ראינו שאנחנו ממשיכים לעבוד עם אובייקט הפרגמנט וגם כאן אין שום בעיה, אבל כאשר ביצענו שוב פעם שינוי אוריינטציה ראינו שאנחנו בעצם חוזרים למידע הראשוני שהיה בפרגמנט.
ופה אנחנו רוצים עכשיו לכתוב קטע קוד ששומר את הסטייט הפנימי של הפריגמנט ומשחזר אותו בחזרה כאשר הפריגמנט נוצרת מחדש. את זה אנחנו צריכים לעשות בתוך אובייקט הפריגמנט עצמו.
מה שאנחנו צריכים לעשות זה שוב פעם כאן לבצע דריסה של שתי פונקציות. onSaveInstanceState, להשאיר את תקודת הסופר, ובתוך הפונקציה הזאת אנחנו רוצים לבצע שמירה של הסטייט הפנימי של הפרגמנט.
את זה אנחנו רוצים לעשות בכל פרגמנט שברצוננו ישמור סטייט פנימי שלה, בכדי שאם מתבצע שינוי או אוריינטציה, אנחנו רוצים להמשיך עם הסטייט האחרון, עם המצב האחרון של הפרגמנט.
אבל הפונקציה שמשחזרת את המידע זה לא onRestore, אלא onActivityCreated, זאת הפונקציה שבה אנחנו מבצעים את השחזור של הסטייט הפנימי. גם כאן אנחנו משאירים את תקודת הסופר, ובתוך הפונקציה הזאת אנחנו רוצים לבצע שחזור.
אז בואו נבצע את זה. דבר ראשון, מה שכדענו לעשות, בשביל שיהיה פשוט כרגע, זה להעלות את המידע הפנימי לאזור הגלובלי. עלאת המידע הזה לאזור הגלובלי מאפשר לפונקציה אחת להדכן אותו ולפונקציה אחרת לקרוא אותו.
לדוגמה אנחנו נוכל ב-Save Instant State לקחת את המידע ולשמור, ב-Restore או ב-OnActivity Created להחזיר את המידע בכדי שה-Fragment תוכל לעבוד עם המידע הזה.
אז בואו נגדיר כאן Private וזה היה ה-Image ID, בואו ניקח גם את ה-Description, נעשה copy, נגדיר פה private, והנה הדסקריפשן. כאשר אנחנו מכניסים מידע, אנחנו רוצים להכניס את המידע ישירות לדאטה ממברס הגלובליים, בכדי שהמידע הזה יוכל אחר כך להישמר ב-saved instance state.
כאשר משנים את המידע הזה מבחוץ, גם כאן אנחנו רוצים להכניס את ה-change למשתנים הגלובליים. בואו ניגש ל-this-image-id, שווה ל-image-id, this-description שווה ל-description, ואז זה מאפשר לנו שגם אם העולם החיצון ישנה מתישהו את המידע, אז המידע העדכני נשמר באזור הגלובלי, ואז אם מתבצע שינוי אוריינטציה,
אנחנו שומרים את המידע העדכני. בשינוי האוריינטציה, אנחנו רוצים לגשת ל-out-state, ופשוט to put values, להכניס את האינטג'ר ולהכניס את הדסקריפשן.
בואו נגדיר אותו כ-image ID, image ID זה המשתנה הגלובלי, out state put string הפעם, זה היה description, ונכניס את הדסקריפשן, וכמובן ב-on activity created, אנחנו רוצים לבצע קודם כל בדיקה, האם ה-saved instant state הוא לא null?
אם ה-saved instant state אינו null, אז אנחנו רוצים לשחזר את המידע. אז קודם כל בואו נחזיר אותו למשתנים הגלובליים. imageId, saved instant state, get int.
הקוד שלו היה imageId, כלומר נפתח.