
onCreate.TextView של הגולדפיש נותנים id ואירוע onClick שצובע אותו בכחול בעזרת setTextColor. את ה-id וה-onClick מעתיקים לשני ה-layout, כך שהקוד עובד בשניהם.Toast בתוך onCreate מראה שהוא מורץ בכל שינוי כיוון, כלומר האובייקט הקודם נהרס ונוצר חדש.onCreate.הטקסט המלא של הדקות הראשונות בהרצאה «The Activity State Problem» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
לפיתוח אפליקציה באנדרואיד קיימת בעיה שדורשת את ההתייחסות שלנו בתור מפתחי האפליקציה, והבעיה הזאת קשורה ל-State של ה-Activity ולאוריינטציה של המכשיר, או ליתר דיוק שינוי האוריינטציה של המכשיר.
מה זה ה-State של ה-Activity? ה-State של ה-Activity זה פשוט המידע שקיים ברמת ה-Activity שיכול להשתנות כאשר היוזר משתמש ב-Activity בזמן שינוי, האוריינטציה של המכשיר הסטייט הזה המצב או הדאטה הזה יכולים להיעלם למה זה נגרם כי יש לנו כאן שני לייאוטים שונים שיכולים להיות אבל אקטיביטי אחת בלבד כלומר המחלקה שמטפלת באקטיביטי היא מחלקה אחת ויש לנו שני לייאוטים
עכשיו מבחינה הגיונית ברור שזה הדבר הנכון לביצוע כי מה מה שאנחנו רוצים לעשות זה רק לשנות את ה-UI עצמו, את ממשק המשתמש, ולכן יש לנו שני ליהאוטים, אחד לכל מצב.
אבל זה לא הגיוני שיהיה לנו שתי מחלקות, אנחנו לא רוצים את הקוד בג'אווה לשנות. אבל ההתנהגות של המכשיר היא כזאת שכאשר האוריינטציה משתנה, בשביל שהמכשיר יוכל להציג מחדש את הליהאוט המתאים, אז הוא בעצם הורס את כל המחלקה, את כל האובייקט של המחלקה ויוצר את האובייקט הזה מחדש ואז
מריץ את כל האירועים מחדש לדוגמה את האירוע on create שכאן אנחנו רואים שהוא בעצם הולך ויוצר ומציג את הלאוט המתאים לאוריינטציה. אז קודם כל בואו נבין רגע מה בעצם הבעיה אם יש לנו כאן לדוגמה את הטקסט ויו הזה שמציג לנו את המידע על הגולדפיש אז בואו לצורך הדוגמה נגדיר לו איזשהו איידי טקסט ויו גולדפיש ואנחנו רוצים להציג גם איזשהו אירוע on-click טקסט ויו גולדפיש underline on-click ומה
שאנחנו רוצים לעשות זה פשוט מאוד ברגע שהיוזר לוחץ על הטקסט ויו אנחנו אנחנו רוצים לצבוע אותו בצבע כלשהו. אז בואו ניגש לקוד, ושימו לב שיש לנו פה קוד אחד ויחיד שנמצא במחלקה Main Activity, ומה שאנחנו רוצים לעשות זה פשוט קודם כל להגיע לטקסט view הזה, שקראנו לו טקסט view גולד פיש.
אנחנו רוצים לאתר אותו, בואו נכניס לתוכו טקסט view גולד פיש, RID והנה ה-ID שלו, כך אנחנו יכולים לבוא לפה בזמן לחיצת קליק לבוא לטקסט view:
goldfish.settextcolor ופשוט לתת לו איזשהו צבע לדוגמה blue. אוקיי, עכשיו אנחנו צריכים לבצע את השינויים האלה שעשינו ב-UI בשני הלייאוטים, זאת אומרת לא רק בלייאוט אחד של פורטרייט אנחנו רוצים ID ו-on-click אנחנו רוצים את זה בדיוק גם בלייאוט השני.
אז בואו ניקח את ה-ID הזה as is, קונטרול C, נבוא לכאן, קונטרול V, נחזור בחזרה ונעתיק את ה-On Click הזה, קונטרול C, נחזור לפה, קונטרול V וכעת לא משנה מה הלאוט, אוטומטית הקוד הזה יופעל ויעבוד כמו שצריך.
בואו נבדוק את זה, נריץ את האפליקציה, הנה אנחנו רואים שהיא עולה על המכשיר, הנה אנחנו רואים שהיא עולה על האמולטור ובואו ניגש לאמולטור ונלחץ על הטקסט ואנחנו רואים שהוא צבוע בכחול.
עכשיו נבצע קונטרול F12 ושימו לב שהכחול נעלם. נחזיר קונטרול F12 ועדיין הכחול שעשינו מקודם על הלייאוט של הפורטרייט לא חוזר בחזרה ולא משנה איפה אנחנו עושים את זה.
שימו לב שחזרנו לאפור גם אם אנחנו לוחצים כאן בלנסקייפ והוא צבוע בכחול כאשר אנחנו נחזור לפורטרייט קיבלנו את ערכי הדיפולט שהיו בהתחלה גם אם אנחנו עושים את זה על המכשיר שימו לב שכרגע צבענו את זה בכחול אני מסובב את המכשיר ואנחנו חוזרים בחזרה לדיפולט שהוא אפור אני לוחץ עוד פעם זה נהיה כחול חוזר בחזרה
וזה הופך להיות בחזרה לאפור זאת אומרת שיש לנו פה משהו שנקרא state של האקטיביטי וזה המצב הנוכחי שבו היא נמצאת וכרגע כאשר היוזר עובד עם האקטיביטי הוא מגדיר איזשהו מצב או איזשהו data או איזשהם נתונים שהם כרגע נמצאים באקטיביטי במקרה הזה זה פשוט צבע של טקסט שהתבצע אבל כאשר היוזר משנה במקרה או
לא במקרה את האוריינטציה של המכשיר אז אנדרואיד מה שהיא הייתה חייבת לעשות זה להרוס לגמרי את האקטיביטי וליצור את האקטיביטי מחדש ולכן כל השינויים שהתבצעו נעלמים.
עכשיו שימו לב שיכול להיות שהתבצעו שינויים גם ברמת ה-Layout כמו במקרה הזה וגם שינויים ברמה של Data Members שנמצאים באקטיביטי כל השינויים האלה נהרסים גם אם יש לנו פה איפה שהם משתנים הם בעצם נוצרים מחדש.
ואנחנו לא זוכרים את כל המידע הקודם שהיה ברמת האקטיביטי.