PracticU

מניעת כפילות בקוד של Fragment

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

מניעת כפילות בקוד של Fragment
כשמוסיפים פרגמנט ב-onCreate של האקטיביטי, כל שינוי אוריינטציה יוצר מחדש את האקטיביטי ומוסיף עוד עותק של הפרגמנט. ההרצאה מראה את הבעיה ואת הפתרון הפשוט.
השלבים העיקריים
1. ההגדרה: מסירים את הלחצנים ואת הקוד שלהם, ומשאירים רק את ההוספה ב-onCreate: יצירת אובייקט פרגמנט, טרנזקציה של add ו-commit, כך שהפרגמנט מוצגת מיד עם עליית האפליקציה.
2. הכנה להדגמה: מגבילים את גובה ה-ScrollView ל-100dp כדי שיהיה אפשר לגלול ולראות את הבעיה בבירור.
3. הבעיה: אחרי Ctrl+F12 לשינוי אוריינטציה, גוללים ורואים את הכתב משוכפל. האקטיביטי נוצרה מחדש, שתי השורות רצו שוב, ויש שתי פרגמנטים. עוד שינוי אוריינטציה מוסיף שלישית.
4. הפתרון: עוטפים את ההוספה ב-if שבודק אם savedInstanceState שווה null. בהרצה ראשונה הוא תמיד null, ובהרצות הבאות הוא לא null גם אם לא שמרנו בו כלום.
5. בדיקה: אחרי התיקון, שינוי האוריינטציה לא מוסיף פרגמנט נוספת.
שימו לב
זו בדיקה מקובלת כשמוסיפים פרגמנט ב-onCreate: הפרגמנט נוספת פעם אחת בלבד, ולא שוב בכל שינוי אוריינטציה.
כעת אפשר למנוע הוספה כפולה של פרגמנט בשינוי אוריינטציה.
השיעור הבא בקורס: שליחת מידע ל-Fragment

פרקי ההרצאה: מניעת כפילות בקוד של Fragment

  1. 00:00

    הוספת Fragment כבר ב-onCreate

  2. 01:37

    הגבלת הגובה לבדיקת גלילה

  3. 02:41

    הרצה ושינוי אוריינטציה

  4. 03:18

    טקסט משוכפל משני Fragments

  5. 04:17

    בדיקת savedInstanceState למניעת כפילות

תמלול ההרצאה: מניעת כפילות בקוד של Fragment

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

  1. 00:01

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

  2. 00:15

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

  3. 00:37

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

  4. 00:53

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

  5. 01:11

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

  6. 01:32

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

  7. 01:45

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

  8. 02:14

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

  9. 02:33

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

  10. 02:51

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

  11. 03:07

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

  12. 03:28

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

  13. 03:57

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

  14. 04:21

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

  15. 04:42

    איך אנחנו בודקים האם זה פעם ראשונה? פשוט מאוד, הSave Instance State תמיד נל בפעם הראשונה. בפעם השנייה והמעלה, הSave Instance State לא יהיה נל, אפילו שלא הכנסנו כלום ב-Saved Instance State.

  16. 05:01

    אז זאת בדיקה מאוד מאוד ידועה, שמתרחשת כאשר אנחנו מוסיפים Fragment ב-OnCreate. יש לנו ב-OnCreate את ה-Saved Instance State, אנחנו יכולים לבצע בדיקה, לפיו האם אנחנו ריצה ראשונה כן או לא.

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

ההרצאה הקודמת: שימוש ב-Fragment בצורה דינמית בקוד

ההרצאה הבאה: שליחת מידע ל-Fragment

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

  • מניעת וולידציה אוטומטית
  • שימוש ב-Fragment ב-React

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

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