PracticU

Using Only One Activity

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Using Only One Activity
מילון מושגים:
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
IDE - סביבת פיתוח משולבת: תוכנה שמרכזת עורך קוד, מהדר, כלי ניפוי וכלים נוספים במקום אחד.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
Intent - ב-Android, אובייקט הודעה שמבקש פעולה, למשל מעבר בין מסכים או הפעלת רכיב אחר.

Using Only One Activity
באפליקציית Master Details הקודמת לחיצה על פריט בפורטרייט פותחת אקטיביטי חדשה, וזה איטי כי אקטיביטי כבדה הרבה יותר מפרגמנט. בהרצאה זו מוותרים על אקטיביטי הפירוט ומחליפים פרגמנטים על אותה אקטיביטי אחת.
השלבים העיקריים
1. מחיקה: מוחקים את AnimalDetailsActivity ואת ה-layout שלה, וגם את ההגדרה שלה מהמניפסט. המחיקה לא מסירה אותה משם אוטומטית, וה-IDE מסמן באדום.
2. ניקוי המיין אקטיביטי: מסירים את הקוד הישן של onCreate ושל onItemClick וכותבים אותם מחדש. בהרצאה זו כל ה-UI כבר נמצא בפרגמנטים.
3. הרשימה תמיד: בין פורטרייט ובין לנדסקייפ מחליפים (replace) את frameLayoutContainerList ב-AnimalListFragment חדשה.
4. פירוט בלנדסקייפ: אם MyApp.isLandscape(), מחליפים את frameLayoutDetails ב-AnimalDetailsFragment. replace מתאימה כי יש משתנה סטטי שמחזיק את החיה האחרונה שהוצגה.
5. לחיצה בפורטרייט: ב-onItemClick, אם MyApp.isPortrait(), מחליפים את frameLayoutList ב-AnimalDetailsFragment, עם addToBackStack כדי שלחיצה על Back תחזיר לרשימה, ו-commit.
6. סיום הטרנזקציה: קוראים ל-getSupportFragmentManager().executePendingTransactions() כדי שהפרגמנט תהיה מוכנה לפני השימוש.
7. הצגת החיה: קוראים ל-animalDetailsFragment.displayAnimal(animal) בשני המצבים, כי בשניהם יש פרגמנט פירוט. הקוד של ה-Intent מוסר.
בהרצה המעבר לפירוט מהיר בהרבה, ושינוי אוריינטציה שומר את החיה האחרונה שנבחרה.
שימו לב
פרגמנטים נטענים מהר יותר מאקטיביטי חדשה, ולכן אפשר להחזיק אקטיביטי אחת ולהחליף עליה פרגמנטים.
כעת אפשר לבנות Master Details עם אקטיביטי אחת בלבד.

פרקי ההרצאה: Using Only One Activity

  1. 00:00

    למה ה-Details Activity איטית

  2. 00:55

    מחיקת ה-Details Activity וה-Layout

  3. 01:34

    הסרת ה-Activity מהמניפסט

  4. 02:36

    כתיבה מחדש של onCreate

  5. 03:13

    הצגת הרשימה עם replace

  6. 04:34

    הצגת ה-Details ב-Landscape

  7. 05:33

    החלפת הפרגמנט ב-Portrait

  8. 06:12

    הוספת Back Stack לחזרה

תמלול ההרצאה: Using Only One Activity

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

  1. 00:00

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

  2. 00:14

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

  3. 00:26

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

  4. 00:37

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

  5. 00:49

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

  6. 01:04

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

  7. 01:21

    Animal Detail Activity, מכה שימני, Delete, אוקיי, וגם את ה-Layout. הנה יש לנו פה את ה-Animal Detail, Activity Animal Detail, וסך הכל היה פה רק את ה-Frame Layout שמכיל את ה-Fragment של ה-Detail, גם מזה אנחנו רוצים להיפטר, נבצע Delete, וחשוב גם ללכת למניפסט ובמניפסט להיפטר מזה.

  8. 01:53

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

  9. 02:09

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

  10. 02:21

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

  11. 02:45

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

  12. 03:04

    אז בואו ניגש ל-Animal List Fragment, ופשוט נבנה אובייקט Animal List Fragment חדש לגמרי. ומה שנעשה זה get support fragment manager, get support fragment manager, נקודה בגין transaction, replace, ונחליף את הפריים layout container list.

  13. 03:37

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

  14. 03:59

    אז יש לנו פה את ה-animal-list-fragment.commit בצורה כזאת. זאת אומרת אם היוזר נמצא בפורטרייט אנחנו רואים רק את ה-list, אם הוא נמצא בלנסקייפ אנחנו רואים גם את ה-list וגם את ה-details, אבל אם הוא נמצא בפורטרייט ולוחץ על פריט אנחנו רוצים להחליף ולהציג רק את ה-details.

  15. 04:25

    אז כאן אנחנו בעצם הולכים לבצע Animal Details Fragment, בואו נייצר אובייקט Animal Details Fragment חדש, ונבדוק האם My App is Landscape.

  16. 04:42

    אם אנחנו ב-Landscape, מה שאנחנו רוצים לעשות זה Get Support Fragment Manager, בגין טרנזקשן, ואנחנו רוצים הפעם, to replace RID Frame Layout Details, ולהכניס את האנימל Details Fragment, וTo Commit, בצורה כזאת.

  17. 05:08

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

  18. 05:37

    גוד, מה אנחנו רוצים לעשות ב-on-item-click? אם my app is portrait, מה שאנחנו רוצים לעשות, get support fragment manager בגין Transaction, ואנחנו רוצים to replace our id frame layout list, ואנחנו רוצים לשלוח את ה-animal details fragment, שיוצג איפה שהיה אמור להיות ה-list, מפני שיש לנו רק activity אחת.

  19. 06:10

    בואו נבצע add to backstack מפני שאנחנו רוצים לחזור בחזרה במידה והיוזר לוחץ על ה-back button וto commit it all. מגלל שיש לנו פה רק activity 1 עם כמה fragment שמוצגים עליה אז אנחנו כמובן רוצים להוסיף את ה-backstack שהיוזר יוכל לחזור בחזרה.

  20. 06:31

    הדבר הבא שאנחנו רוצים לבצע זה get supportFragmentManager ו-executePendingTransaction בכדי שכל הסיפור הזה ייכנס לתוקף.

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

ההרצאה הקודמת: Master Details - Adding Activities

ההרצאה הבאה: הסבר על Location and Maps

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

  • Pattern - One Way
  • Activity Logs
  • Creating and Using Arrays
  • Using the locals Object

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

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