PracticU

Receive Data Back from Activity

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Receive Data Back from Activity
מילון מושגים:
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
Intent - ב-Android, אובייקט הודעה שמבקש פעולה, למשל מעבר בין מסכים או הפעלת רכיב אחר.
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
אירוע - התרחשות שהמערכת מזהה ויכולה להגיב לה, כמו לחיצת עכבר, הקשה או סיום פעולה.
Android - מערכת הפעלה מבוססת Linux לטלפונים ולמכשירים ניידים, שפותחה על ידי גוגל.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.

Receive Data Back from Activity
לפעמים אקטיביטי שאנחנו מציגים אוספת מידע מהמשתמש, נסגרת, ואנחנו רוצים להמשיך ולהשתמש במידע הזה. השיעור בונה דוגמה שבה אקטיביטי בן מאפשרת לבחור תמונת רקע, והאקטיביטי הראשית צובעת בה את הרקע ומציגה כותרת.
השלבים העיקריים
1. בניית אקטיביטי הבן: מוסיפים Activity חדשה בשם BackgroundActivity עם GridLayout של 2 על 2 (columnCount ו-rowCount שווים 2). בכל תא ImageView עם רוחב וגובה 0dp, layout_columnWeight ו-layout_rowWeight שווים 1, ו-scaleType מסוג fitXY. ארבע התמונות נלקחות מה-drawable.
2. הצגה בעזרת startActivityForResult: באקטיביטי הראשית יוצרים Intent ל-BackgroundActivity. במקום startActivity, שלא מחזירה ערך, קוראים ל-startActivityForResult, שמקבלת את ה-Intent וגם requestCode.
3. קבוע ל-requestCode: מגדירים קבוע private final int בשם REQUEST_CODE_IMAGE עם הערך 1. כאן יש רק סוג תוצאה אחד, ולכן הערך עדיין לא משפיע, אבל נהוג לתת לו שם.
4. החזרת תשובה מהבן: לכל תמונה מגדירים אירוע onClick משלה. בתוכו יוצרים Intent ושמים בו בעזרת putExtra את מזהה התמונה (R.drawable...) וכותרת, למשל Outer Space. אחר כך setResult(RESULT_OK, intent) ו-finish() לסגירת האקטיביטי.
5. ביטול דרך Back: ב-onCreate מפעילים setDisplayHomeAsUpEnabled(true), ובדריסת onOptionsItemSelected בודקים אם item.getItemId() שווה ל-android.R.id.home ואז קוראים ל-finish(). כך נסגרת האקטיביטי בלי תוצאה.
6. קבלת התוצאה בראשית: דורסים את onActivityResult (הרשאה protected), משאירים את קריאת super, ובודקים ש-resultCode שווה ל-RESULT_OK וגם ש-requestCode שווה ל-REQUEST_CODE_IMAGE. אז שולפים מה-data את getIntExtra של מזהה התמונה (עם ברירת מחדל 0) ואת getStringExtra של הכותרת.
7. שימוש במידע: קוראים ל-setBackgroundResource על ה-layout הראשי עם מזהה התמונה, ול-setText על ה-TextView עם הכותרת.
פקודות והגדרות
- startActivityForResult(intent, requestCode)
- setResult(RESULT_OK, intent) ו-RESULT_CANCELED (ברירת המחדל כשלא הוחזר דבר)
- onActivityResult(requestCode, resultCode, data)
שימו לב
בדיקת ה-requestCode נחשבת הרגל טוב גם כשיש רק בקשה אחת, כי כשיהיו כמה בקשות נצטרך אותה כדי לדעת מה הוחזר. בהרצה רואים שלחיצה על Back לא משנה דבר, ובחירה בתמונה מעדכנת גם את הרקע וגם את הטקסט.
כעת אפשר להציג אקטיביטי בן, לקבל ממנה נתונים כשהיא נסגרת ולהשתמש בהם באקטיביטי האב.
השיעור הבא בקורס: The Request Code

פרקי ההרצאה: Receive Data Back from Activity

  1. 00:00

    למה לקבל מידע חזרה מ-Child Activity

  2. 00:59

    הוספת Activity לבחירת רקע

  3. 01:44

    GridLayout עם ארבע תמונות

  4. 05:18

    startActivityForResult במקום startActivity

  5. 05:58

    מהו Request Code

  6. 07:51

    אירועי לחיצה על התמונות

  7. 09:53

    החזרת נתונים ב-Intent עם putExtra

  8. 11:12

    דיווח הצלחה עם setResult

תמלול ההרצאה: Receive Data Back from Activity

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

  1. 00:02

    אחרי שראינו איך אנחנו יכולים לשלוח מידע ל-child activity שאנחנו מציגים, בואו נראה איך אנחנו יכולים לקבל בחזרה מידע מה-activity שאנחנו מציגים.

  2. 00:14

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

  3. 00:26

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

  4. 00:42

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

  5. 01:05

    יש לנו כאן את ה-ID של המיין אקטיביטי שדרכו נצבעה את התמונה. אז לצורך כך אנחנו צריכים להוסיף אקטיביטי. אז בואו ניגש ל-upnew ונבחר באקטיביטי ויש לנו כאן את ה-empty activity ובואו ניתן לה את השם background activity יש לנו כאן activity background כ-layout, בואו נבצע finish ובואו ניגש ל-layout ונעצב את ה-activity.

  6. 01:42

    אז אנחנו רוצים לקלוט מהיוזר תמונה עבור רקע, אז בואו ניקח grid layout ויאפשר לנו להציג מספר תמונות במעין grid כזה, ניפטר כאן לדוגמה מה-tools אנחנו לא נצטרך אותו וניפטר מאלה אנחנו לא נצטרך אותם ומה שאנחנו רוצים לעשות זה להגדיר איזה שהוא adding מסוים בואו נניח 3 dp ואנחנו

  7. 02:14

    רוצים 4 תמונות אז מספר העמודות שיש לנו בגריד שלנו זה בעצם column count ליתר דיוק זה יהיה 2 ויש לנו row count זה יהיה גם 2 ואז הגריד הזה הוא יוכל להיות 2 על 2 נגדיר איזה שהוא מרג'ינג דיפולטי use default margins true ואנחנו יכולים לגשת ולבנות את הרכיבים בתוך הגריד אז אנחנו רוצים סך הכל אימג' ויו בואו

  8. 02:50

    ניגש ונגדיר שאנחנו רוצים וויד 0 dp height 0 dp הסיבה שאנחנו לוקחים 0 dp לוויד ולהייט כי אנחנו רוצים שהתמונות יסתדרו בדיוק לפי המקום שיש להם בגריד בואו נגדיר column weight רוג ווייט 1 ונגדיר סקייל טייפ עבור התמונה פיט x y בכדי שהיא תתפוס את כל המקום שיש לה, נגדיר src וניגש לדרובול ובדרובול יש לנו מספר תמונות שהכנתי

  9. 03:35

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

  10. 04:12

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

  11. 04:31

    אז בואו נבין את כל התהליך שיש פה. נתחיל מההתחלה. המיין אקטיביטי הוא זה שקודם כל מציג את ה-Child Activity.

  12. 04:40

    יש לנו כאן במיין אקטיביטי את הלחצן, יוזר לוחץ על הלחצן, הלחצן מפעיל את האירוע של ה-Batten Background ואנחנו רוצים כאן להציג את ה-Child Activity, כלומר את ה-Background Activity.

  13. 04:56

    הקוד שאנחנו רוצים לכתוב כאן זה כמובן Intent שווה New Intent, כי אנחנו רוצים להציג את ה-Child Activity, אנחנו רוצים להציג את ה-Activity ולכן זה This, ואנחנו רוצים להציג את ה-Background Activity ולכן יש לנו Background Activity Class.

  14. 05:18

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

  15. 05:33

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

  16. 06:01

    והדבר השני שאנחנו רוצים זה בעצם איזשהו משתנה בואו נלחץ על קונטרול p בכדי להציג את המידע שנקרא request code request code זה איזשהו קבוע אינטג'רי שאנחנו ממציאים בכדי לתאר את הסיבה או את התוצאה הספציפית שהוחזרה מהצ'יילד אקטיביטי מתי אנחנו משתמשים מזה כאשר יש לנו מספר אפשרויות או מספר תוצאות

  17. 06:30

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

  18. 06:45

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

  19. 06:56

    זה אומר רקע שהוא רוצה עבור המיין אקטיביטי. לכן כל מה שנעשה כרגע זה נגדיר כאן איזשהו קבוע פה למעלה, ניקח private, final, זה אומר שהוא קבוע ולא ניתן לשינוי, אינטג'ר, ונקרא לו request underline code underline image.

  20. 07:18

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

  21. 07:45

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

  22. 08:15

    on-click שווה והתמונה הראשונה מתארת לנו space אז נגדיר space image underline on-click התמונה השנייה מתארת לנו ספרות, אז בואו נגדיר ספר אימאג' און קליק.

  23. 08:42

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

  24. 09:01

    בואו ניגש לכל אחד מהאירועים, Alt Enter, ונבנה לכל אירוע קטע קוד משלו, ממש לראות את ההבדלים ביניהם כמובן שהיינו יכולים לעשות אירוע אחד שמטפל בהכל בתוך האירוע היינו יכולים לבדוק לפי ה-ID של התמונה לתת לתמונה ID ולפי ID איזו תמונה הפעילה את האירוע ואז לבצע איזשהו סוויץ' וכך לטפל באירוע המתאים או בתמונה המתאימה

  25. 09:33

    אבל לצורך הפשטות לא נתעסק כרגע עם סוויץ' ועם כל מה שבתוכו כל תמונה מפעילה אירוע אחר. אז מה אנחנו רוצים לעשות בתוך האירועים? מה שאנחנו רוצים לעשות זה להחזיר תשובה לפרנט אקטיביטי שהפעילה אותנו וגם לסגור את ה-child activity, כלומר אותנו.

  26. 09:59

    איך אנחנו מחזירים תשובה למי שקרא לנו? החזרת תשובה גם מתבצעת על ידי אינטנט ולכן בואו נגדיר כאן אינטנט בצורה כזאת והאינטנט הוא ריק. הדבר הבא שאנחנו רוצים זה להגדיר איזה מידע אנחנו רוצים להחזיר ל-Parent Activity וזה מתבצע על ידי Put Extra.

  27. 10:24

    Intent.PutExtra אנחנו שמים מידע בתוך ה-Intent ואנחנו רוצים קודם כל לומר איזה תמונה היוזר בחר, זה יהיה ה-ImageID שלה.

  28. 10:38

    אז כאן אנחנו נמצאים בתמונה הראשונה שזה היה Space, אז בואו ניגש ונכניס r.BetוךDrawable, יש לנו את התמונה ספייס שזה בעצם ה-ID שלה. בואו נחזיר עוד דבר put extra וזה יהיה איזשהו אימג' טייטל ובואו נחזיר שהטייטל כרגע זה outer space שזאת בעצם התמונה שהוצגה.

  29. 11:06

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

  30. 11:36

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

  31. 11:52

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

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

ההרצאה הקודמת: Parcelable

ההרצאה הבאה: The Request Code

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

  • Activity Tracing
  • Activity Logs
  • Data Driven Test - חלק 1
  • Variables and Data Types

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

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