
Activity חדשה בשם BackgroundActivity עם GridLayout של 2 על 2 (columnCount ו-rowCount שווים 2). בכל תא ImageView עם רוחב וגובה 0dp, layout_columnWeight ו-layout_rowWeight שווים 1, ו-scaleType מסוג fitXY. ארבע התמונות נלקחות מה-drawable.Intent ל-BackgroundActivity. במקום startActivity, שלא מחזירה ערך, קוראים ל-startActivityForResult, שמקבלת את ה-Intent וגם requestCode.private final int בשם REQUEST_CODE_IMAGE עם הערך 1. כאן יש רק סוג תוצאה אחד, ולכן הערך עדיין לא משפיע, אבל נהוג לתת לו שם.Intent ושמים בו בעזרת putExtra את מזהה התמונה (R.drawable...) וכותרת, למשל Outer Space. אחר כך setResult(RESULT_OK, intent) ו-finish() לסגירת האקטיביטי.onCreate מפעילים setDisplayHomeAsUpEnabled(true), ובדריסת onOptionsItemSelected בודקים אם item.getItemId() שווה ל-android.R.id.home ואז קוראים ל-finish(). כך נסגרת האקטיביטי בלי תוצאה.onActivityResult (הרשאה protected), משאירים את קריאת super, ובודקים ש-resultCode שווה ל-RESULT_OK וגם ש-requestCode שווה ל-REQUEST_CODE_IMAGE. אז שולפים מה-data את getIntExtra של מזהה התמונה (עם ברירת מחדל 0) ואת getStringExtra של הכותרת.setBackgroundResource על ה-layout הראשי עם מזהה התמונה, ול-setText על ה-TextView עם הכותרת.startActivityForResult(intent, requestCode)setResult(RESULT_OK, intent) ו-RESULT_CANCELED (ברירת המחדל כשלא הוחזר דבר)onActivityResult(requestCode, resultCode, data)requestCode נחשבת הרגל טוב גם כשיש רק בקשה אחת, כי כשיהיו כמה בקשות נצטרך אותה כדי לדעת מה הוחזר. בהרצה רואים שלחיצה על Back לא משנה דבר, ובחירה בתמונה מעדכנת גם את הרקע וגם את הטקסט.הטקסט המלא של הדקות הראשונות בהרצאה «Receive Data Back from Activity» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שראינו איך אנחנו יכולים לשלוח מידע ל-child activity שאנחנו מציגים, בואו נראה איך אנחנו יכולים לקבל בחזרה מידע מה-activity שאנחנו מציגים.
למה לנו לעשות דבר כזה? יכול להיות שה-activity שאנחנו מציגים, כלומר ה-child activity, קולטת מידע מהיוזר, נסגרת, ואנחנו רוצים להמשיך ולהשתמש עם המידע הזה.
אז בואו נראה איך כל הנוהל הזה מתבצע. אז לצורך הדוגמה, בואו נפתח Child Activity שמאפשרת למשתמש לקבל תמונת רקע ואנחנו רוצים להשתמש עם התמונת רקע במיין אקטיביטי.
כאן במיין אקטיביטי אנחנו רואים שיש לנו איזשהו טקסט view שמאפשר לנו להציג איזושהי כותרת עבור הרקע ויש לנו כאן לחצן שמאפשר להציג את ה-child אקטיביטי בכדי שהיוזר יבחר תמונה ולאחר מכן אנחנו רוצים לצבוע את הרקע של המיין אקטיביטי בתמונה שנבחרה.
יש לנו כאן את ה-ID של המיין אקטיביטי שדרכו נצבעה את התמונה. אז לצורך כך אנחנו צריכים להוסיף אקטיביטי. אז בואו ניגש ל-upnew ונבחר באקטיביטי ויש לנו כאן את ה-empty activity ובואו ניתן לה את השם background activity יש לנו כאן activity background כ-layout, בואו נבצע finish ובואו ניגש ל-layout ונעצב את ה-activity.
אז אנחנו רוצים לקלוט מהיוזר תמונה עבור רקע, אז בואו ניקח grid layout ויאפשר לנו להציג מספר תמונות במעין grid כזה, ניפטר כאן לדוגמה מה-tools אנחנו לא נצטרך אותו וניפטר מאלה אנחנו לא נצטרך אותם ומה שאנחנו רוצים לעשות זה להגדיר איזה שהוא adding מסוים בואו נניח 3 dp ואנחנו
רוצים 4 תמונות אז מספר העמודות שיש לנו בגריד שלנו זה בעצם column count ליתר דיוק זה יהיה 2 ויש לנו row count זה יהיה גם 2 ואז הגריד הזה הוא יוכל להיות 2 על 2 נגדיר איזה שהוא מרג'ינג דיפולטי use default margins true ואנחנו יכולים לגשת ולבנות את הרכיבים בתוך הגריד אז אנחנו רוצים סך הכל אימג' ויו בואו
ניגש ונגדיר שאנחנו רוצים וויד 0 dp height 0 dp הסיבה שאנחנו לוקחים 0 dp לוויד ולהייט כי אנחנו רוצים שהתמונות יסתדרו בדיוק לפי המקום שיש להם בגריד בואו נגדיר column weight רוג ווייט 1 ונגדיר סקייל טייפ עבור התמונה פיט x y בכדי שהיא תתפוס את כל המקום שיש לה, נגדיר src וניגש לדרובול ובדרובול יש לנו מספר תמונות שהכנתי
ובואו ניקח קודם כל לדוגמה את התמונה פייס שיש לנו שמה בצורה כזאת ועכשיו נשכפל את זה ארבע פעמים ורק נחליף את התמונה. תמונה הבאה בואו ניקח את ספיירס לאחר מכן ניקח את פיט ולאחר מכן ניקח את התמונה האחרונה שיש לנו שזה ריין והנה יש לנו עכשיו אקטיביטי שיש לה ארבע תמונות ואנחנו עכשיו יכולים להציג את
האקטיביטי אנחנו רוצים שהיוזר ילחץ קליק על תמונה וזה יגרום לסקנד אקטיביטי להיסגר אבל יותר מזה להחזיר לפרנט אקטיביטי איזו תמונה נבחרה ואיזשהו טקסט בכדי להציג בכותרת ואנחנו רוצים להשתמש עם המידע הזה ב-Parent Activity.
אז בואו נבין את כל התהליך שיש פה. נתחיל מההתחלה. המיין אקטיביטי הוא זה שקודם כל מציג את ה-Child Activity.
יש לנו כאן במיין אקטיביטי את הלחצן, יוזר לוחץ על הלחצן, הלחצן מפעיל את האירוע של ה-Batten Background ואנחנו רוצים כאן להציג את ה-Child Activity, כלומר את ה-Background Activity.
הקוד שאנחנו רוצים לכתוב כאן זה כמובן Intent שווה New Intent, כי אנחנו רוצים להציג את ה-Child Activity, אנחנו רוצים להציג את ה-Activity ולכן זה This, ואנחנו רוצים להציג את ה-Background Activity ולכן יש לנו Background Activity Class.
הדבר הבא שתמיד עשינו זה Start Activity, אבל אנחנו כרגע לא הולכים לבצע Start Activity. סטארט אקטיביטי זה עבור הצגת אקטיביטי מבלי לקבל ממנה ערך מוחזר.
אם אנחנו רוצים להציג אקטיביטי וגם לאפשר לקבל ערך מוחזר מהאקטיביטי זה יהיה סטארט אקטיביטי פור ריזולט זאת הפונקציה הנכונה להשתמש בה עבור הצגת אקטיביטי ולקבל ריזולט מהאקטיביטי שאנחנו מציגים הסטארט אקטיביטי פור ריזולט מקבלת שני דברים הדבר הראשון שהיא מקבלת זה אינטנט איזה אינטנט אנחנו רוצים שמתאר את האקטיביטי
והדבר השני שאנחנו רוצים זה בעצם איזשהו משתנה בואו נלחץ על קונטרול p בכדי להציג את המידע שנקרא request code request code זה איזשהו קבוע אינטג'רי שאנחנו ממציאים בכדי לתאר את הסיבה או את התוצאה הספציפית שהוחזרה מהצ'יילד אקטיביטי מתי אנחנו משתמשים מזה כאשר יש לנו מספר אפשרויות או מספר תוצאות
שונות שאנחנו יכולים להחזיר מהצ'יילד אקטיביטי. כרגע אין לנו מספר תוצאות שונות מפני שהצ'יילד אקטיביטי מחזירה לנו תוצאה אחת שהיא איזה רקע היוזר בחר.
יכול להיות שהוא יבחר מספר רקעים שונים או כל פעם יבחר רקע אחר, זה בוודאי שהוא יכול כל פעם להחליט על תוצאה אחרת, אבל הסוג של התוצאה זה אותו הסוג.
זה אומר רקע שהוא רוצה עבור המיין אקטיביטי. לכן כל מה שנעשה כרגע זה נגדיר כאן איזשהו קבוע פה למעלה, ניקח private, final, זה אומר שהוא קבוע ולא ניתן לשינוי, אינטג'ר, ונקרא לו request underline code underline image.
ניתן לו סתם מספר שרירותי, מספר 1, ופשוט נשתמש בקבוע הזה בכדי לתאר שזה הקבוע שאנחנו רוצים עבור הערך המוחזר. אין לזה כרגע שום משמעות, יכלתם כרגע אפילו סתם לשלוח איזשהו אפס או אחד, אבל מאוד מקובל לתת איזשהו שם לקבוע ובהמשך אנחנו נראה שיטות או שימושים יותר ספציפיים
עם הקבוע הזה. אז כרגע זה מה ששלחנו והשתי שורות האלה פשוט יציגו להם את ה-child activity. עכשיו אנחנו הולכים ל-child activity, ובצ'יילד אקטיביטי אנחנו רוצים בואו קודם כל ניגש ל-Layout אנחנו רוצים לארגן כאן איזשהו אירוע קליק שהיוזר יוכל ללחוץ על התמונה ומשהו יתרחש בצ'יילד אקטיביטי אז בואו ניגש לכל תמונה ונרשום
on-click שווה והתמונה הראשונה מתארת לנו space אז נגדיר space image underline on-click התמונה השנייה מתארת לנו ספרות, אז בואו נגדיר ספר אימאג' און קליק.
תמונה שלישית יש לנו פיט, אז און קליק יהיה פיט אימאג' און קליק. והתמונה האחרונה מתארת ריין, ולכן האירוע יהיה ריין אימאג' אירוע און קליק.
בואו ניגש לכל אחד מהאירועים, Alt Enter, ונבנה לכל אירוע קטע קוד משלו, ממש לראות את ההבדלים ביניהם כמובן שהיינו יכולים לעשות אירוע אחד שמטפל בהכל בתוך האירוע היינו יכולים לבדוק לפי ה-ID של התמונה לתת לתמונה ID ולפי ID איזו תמונה הפעילה את האירוע ואז לבצע איזשהו סוויץ' וכך לטפל באירוע המתאים או בתמונה המתאימה
אבל לצורך הפשטות לא נתעסק כרגע עם סוויץ' ועם כל מה שבתוכו כל תמונה מפעילה אירוע אחר. אז מה אנחנו רוצים לעשות בתוך האירועים? מה שאנחנו רוצים לעשות זה להחזיר תשובה לפרנט אקטיביטי שהפעילה אותנו וגם לסגור את ה-child activity, כלומר אותנו.
איך אנחנו מחזירים תשובה למי שקרא לנו? החזרת תשובה גם מתבצעת על ידי אינטנט ולכן בואו נגדיר כאן אינטנט בצורה כזאת והאינטנט הוא ריק. הדבר הבא שאנחנו רוצים זה להגדיר איזה מידע אנחנו רוצים להחזיר ל-Parent Activity וזה מתבצע על ידי Put Extra.
Intent.PutExtra אנחנו שמים מידע בתוך ה-Intent ואנחנו רוצים קודם כל לומר איזה תמונה היוזר בחר, זה יהיה ה-ImageID שלה.
אז כאן אנחנו נמצאים בתמונה הראשונה שזה היה Space, אז בואו ניגש ונכניס r.BetוךDrawable, יש לנו את התמונה ספייס שזה בעצם ה-ID שלה. בואו נחזיר עוד דבר put extra וזה יהיה איזשהו אימג' טייטל ובואו נחזיר שהטייטל כרגע זה outer space שזאת בעצם התמונה שהוצגה.
הדבר הבא שאנחנו צריכים להגדיר זה האם בעצם התבצעה כאן הצלחה או כישלון בפעילות של ה-child activity ויש לנו שתי אופציות. או לומר שהתבצעה הצלחה שזה בעצם מה שקרה כרגע או לומר שהתבצע ולא בדיוק כישלון זה בעצם ביטול הפעולה אז בגלל שכרגע היוזר הצליח הוא לחץ על תמונה והכל בסדר אז אנחנו רוצים להגדיר
שהתבצעה הצלחה וזה מתבצע על ידי סלט ריזולט פונקציה מיוחדת שאומרת מה בדיוק התשובה שהתבצעה מהפעילות של האקטיביטי הנוכחית ומחזירה בחזרה את האינטנט.
סט ריזולט מקבלת שני דברים: ריזולט קוד, כלומר מה בדיוק התוצאה, ויש לנו קבוע שנקרא ריזולט אוקיי.