
DetailsActivity ריקה שקולטת נתון בודד אחד. בתוכה TextView לכותרת (עם id, marginTop 50 וגודל 25sp), EditText מתחתיו, ולחצני OK ו-Cancel עם אירועי onClick.putExtra את labelText, למשל Enter your email או Enter your phone.REQUEST_CODE_EMAIL שווה 1 ו-REQUEST_CODE_PHONE שווה 2. כל לחצן קורא ל-startActivityForResult עם הקבוע שלו.onCreate שולפים את labelText מה-Intent בעזרת getStringExtra ומציגים אותו ב-TextView.putExtra בשם user data עם הטקסט מה-EditText, ואז setResult(RESULT_OK, intent) ו-finish(). ב-Cancel קוראים ל-setResult(RESULT_CANCELED) ול-finish() בלי Intent.onActivityResult אם resultCode הוא RESULT_CANCELED לא עושים כלום. אחרת בודקים את requestCode: אימייל מוצג ב-TextView של האימייל, טלפון ב-TextView של הטלפון. כדאי לכתוב else if עם בדיקה מפורשת ולא סתם else, כי בהמשך יתווספו בקשות.data, ואם הוא ריק מציגים Toast עם Data can't be blank, צובעים את ה-EditText באדום וקוראים ל-return.== לא עבדה בדוגמה, והפתרון היה להשתמש ב-equals.requestCode מה הוחזר.הטקסט המלא של הדקות הראשונות בהרצאה «The Request Code» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם ראינו איך אנחנו יכולים לקבל בחזרה מידע מ-child activity שאנחנו פותחים. והיה שם איזשהו שימוש ב-request code, אבל לא באמת עשינו בו שימוש ספציפי. כאן, בסרטון הזה, אנחנו הולכים לראות דוגמה אמיתית לשימוש ב-request code.
אז דבר ראשון, יש לנו את ה-main activity. ב-main activity אנחנו רואים שיש לנו כאן איזשהו לחצן שמבקש מהמשתמש אימייל, ואיזשהו לחצן שמבקש מהמשתמש טלפון, וכאן למטה אנחנו רואים איזשהו טקסט-ויו להצגת האימייל שהתקבל וטקסט-ויו להצגת הטלפון.
זאת אומרת שמה שאנחנו רוצים לעשות במסך הראשי זה לחצן שמאפשר לקלוט אימייל ואז להציג אותו, ולחצן שמאפשר לקלוט טלפון ואז להציג אותו.
ואנחנו רוצים לבצע את הקליטות על ידי Child Activity שתאפשר למשתמש לקלוט את המידע. אבל אנחנו לא רוצים עכשיו לבנות Child Activity אחד בשביל לקלוט אימייל, צ'יילד אקטיביטי אחר בשביל לקלוט טלפון.
אז מה שאנחנו רוצים לעשות זה לבנות צ'יילד אקטיביטי, כלומר אקטיביטי שבוא נניח נקראת Details Activity, שמאפשרת לקלוט נתון בודד אחד ויחיד.
ודרך הצ'יילד אקטיביטי הזאת אנחנו רוצים לקלוט גם את האימייל וגם את הטלפון כל פעם בצורה נפרדת. אז בואו קודם כל נצרף צ'יילד אקטיביטי.
ניגש לאפ מיו אקטיביטי ואנחנו רוצים לבחור Empty Activity ניתן לה את השם Details Activity נבצע Finish ויש לנו כאן את ה-Child Activity של ה-Details בואו ניגש לכאן יש לנו פה Relative Layout ובסדר לנו בואו נבנה קודם כל איזשהו טקסט view שאומר למשתמש מה בעצם אנחנו רוצים ממנו
מפני שה-Child Activity הזאת מיועדת לקבל גם אימייל וגם טלפון ויכול להיות בהמשך עוד דברים אז בואו ניקח כאן איזשהו טקסט view בשביל להציג איזושהי כותרת של מה בעצם אנחנו רוצים לקבל מהמשתמש, שהמשתמש ידע מה בעצם להכניס.
אז יש לנו פה wrap-content, בואו ניתן ID בכדי לעדכן את ההודעה הזאת דרך הקוד, כל פעם זו הודעה אחרת הרי, אז יש לנו פה טקסט view-label בצורה כזאת, דיר מרג'ים טופ של איזה 50, כדי שזה יהיה היפה למטה ו-text size של בוא נניח 25 SP.
והנה יש לנו איזושהי כותרת ב-child activity שאנחנו יכולים להציג ליוזר. לאחר מכן אנחנו רוצים אדי טק בכדי לקלוט את המידע. אז יש לנו פה אדי טקסט של match parent ו-wrap content.
בהייט יש לנו כאן ID בכדי לשלוף את המידע, אדי טקסט דאטה, איזשהו דאטה כללי, מרג'ין טופ 50. בואו נגדיר שהוא הוא נמצא בלואו ה-ID של ה-Text View Label ואז הוא מתחתיו, וגם ה-Text Size שלנו זה 25 SP. לאחר מכן יש לנו לחצן עבור אישור ולחצן עבור ביטול.
בואו ניקח Wrap Content עבור הלחצן, ניתן לו Align Parent Bottom True, Align Parent Left True, יש לנו Text All Caps False, יש לנו טקסט סייז 25, יש לנו טקסט אוקיי ויש לנו און קליק שזה יהיה באטן אוקיי און קליק. בואו נשכפל את הלחצן הזה, יש לנו פה עליין פרנט רייט,
יש לנו אנסל ובאטן אנסל. אז הנה יש לנו כאן את ה-child activity שכל מה שאנחנו רוצים לעשות זה לקלוט איזשהו נתון מהיוזר. אז בואו ניגש ונבנה לנו אירוע עבור האוקיי, ואירוע עבור ה-cancel.
עכשיו בואו נבין את כל התהליך שהולך להיות פה לפני שנתחיל לכתוב את קוד הג'אווה. כאן יש לנו את המיין אקטיביטי ובמיין אקטיביטי אנחנו רוצים להשתמש בצ'יילד אקטיביטי גם בשביל לקלוט אימייל וגם בשביל לקלוט טלפון.
לכן כאשר אנחנו מציגים את הצ'יילד אקטיביטי אנחנו רוצים לומר למשתמש מה בעצם ברצוננו לקלוט. הצ'יילד אקטיביטי הולך לקלוט את זה דרך האדיט טקסט ובוא נניח ככה היוזר לוחץ על אוקיי ואנחנו מחזירים את זה בחזרה למיין אקטיביטי ובמיין אקטיביטי אנחנו צריכים להציג את זה במקום הנכון ובכלל לדעת מה בעצם היוזר הכניס לנו האם הוא הכניס
אימייל או אם הוא הכניס טלפון. לצורך כך בואו נבנה את כל התהליך את כל הפלואו לפי הסדר ואנחנו מתחילים במיין אקטיביטי. במיין אקטיביטי אנחנו רוצים בלחצן של האימייל פשוט לגשת ולבנות בשביל להציג את ה-child-activity.
אז הנה ה-intent שלנו, intent=new-intent ואנחנו רוצים להגיד שאנחנו אלה שמציגים את ה-child, כלומר אנחנו ה-parent, זה יהיה this ואנחנו רוצים להציג את ה-details-activity.class.
לאחר מכן אנחנו רוצים לתת ערך עבור ה-label של ה-child-activity. זה יהיה על ידי intent.putExtra ועבור ה-label טקסט אנחנו רוצים לכתוב enter your email עכשיו למה בעצם הפרנט אקטיביטי צריך לדאוג להצגה של הלייבל ב-child אקטיביטי בגלל שה-child אקטיביטי הוא כללי במקרה הזה ה-detail הזה הוא כללי
הוא אומר אני מסוגל לקלוט מה שאתם רוצים אתם רוצים שאני אקלוט משהו אני לא יודע מה זה תגידו לי מה הכותרת למעלה ואני אקלוט לכם פריט אחד ויחיד ואנחנו רוצים מהמיין אקטיביטי לומר לו מה בדיוק הכותרת להצגה למעלה.
לאחר מכן אנחנו רוצים to start activity for result לשלוח גם את ה-intent ולשלוח גם איזשהו request code וכאן בדיוק אנחנו רואים את הייעוד ואת השימוש ב-request code.
אנחנו עכשיו כן רוצים להעביר request code שונה עבור האימייל ו-request קוד שונה עבור הטלפון בכדי שאנחנו נדע כאשר אנחנו מקבלים את התשובה בחזרה מה ה-child activity החזירה לנו האם זה אימייל או האם זה טלפון ולכן אנחנו צריכים לגשת פה למעלה ולבנות לעצמנו איזשהו קבוע בואו ניקח private final int ונקרא לו rick
west code email ובואו נניח שהוא שווה ל-1 ניקח את זה ונשים כאן. כעת אנחנו רוצים לבצע את אותו הדבר בדיוק עבור הלחצן של הטלפון אבל הלייבל טקסט זה enter your phone ואנחנו רוצים request code phone אז בואו ניגש פה למעלה ctrl d משכפל לנו את כל השורה ונגדיר request code phone והוא כמובן חייב להיות קבוע אחר בואו נניח הקבוע 2 אנחנו חוזרים לפה ואומרים לו
שאנחנו רוצים לשלוח את ה-request code phone. אז קודם כל מבחינת התהליך ביצענו את הקריאה ל-child activity, כלומר את ההצגה של ה-child activity מה-parent activity.
הדבר הבא שאנחנו רוצים לעשות זה לבנות את ה-child activity. אז בואו ניגש לקוד של ה-child activity שזה בעצם ה-details activity.
ודבר ראשון שאנחנו רוצים לעשות זה לגשת ל-on create ולשלוף משם את המידע שהתקבל אז יש לנו כאן אינטנט אינטנט שווה גט אינטנט לאחר מכן סטרינג לייבל טקסט זה המידע שהפרנט שלח לנו אנחנו רוצים לגשת לאינטנט ולקבל גט סטרינג אקסטרה את הלייבל טקסט בצורה כזאת ואנחנו רוצים לשים אותה ברכיב המתאים שזה
בעצם האדי טקסט של הכותרת הטקסט וויו של הכותרת ליתר דיוק אז יש לנו פה פרייבט טקסט ויו טקסט ויו לייבל יש לנו פה פרייבט אדיט טקסט אדיט טקסט דאטה זה היה האידי שלו בואו נאתר אותם כאן טקסט ויו לייבל על ידי פיין ויו ביי איידי טקסט ויו לייבל הנה הוא כאן ויש לנו את האדיט טקסט דאטה אדיט טקסט פיינד אר איידי אדיט טקסט דאטה הנה הוא כאן וכעת אנחנו יכולים לגשת
ל-text-view-label.toset-text את ה-label-text. והנה הפרנט אקטיביטי הגדיר לנו מה בעצם הכותרת שהיוזר הולך לראות ב-details-activity.
בלחצנים, הנה יש לנו פה את הלחצן אוקיי, מה שאנחנו רוצים לעשות זה, אחרי שהיוזר כמובן הכניס מידע בתוך ה-edit-text, אנחנו רוצים להחזיר את זה.
אז יש לנו כאן intent, intent שווה new intent, יש לנו כאן intent.put extra אנחנו רוצים להחזיר את המידע עכשיו המידע הזה יכול להיות אימייל הוא יכול להיות טלפון הוא יכול להיות בהמשך דברים אחרים שם פרטי שם משפחה אנחנו לא מגדירים מה המידע ולכן נגדיר אותו כuser data לא יודע מה זה מה שהuser הביא לי זה המידע לאחר מכן Edit Text Data,
Get Text ובואו נהפוך אותו לסטרינג טהור ואז אנחנו רוצים To Set Result הנה יש לנו פה את ה-Result OK ואת ה-Intent ומיד אחר כך To Finish.
זה מה שאנחנו רוצים לעשות בלחצן ה-OK. בלחצן ה-Cancel אנחנו רוצים לגשת ל-Set ריזולט ולתת לו ריזולט קנסלד לפני שהיוזר ביטל את זה, עכשיו לא חייבים לבצע את זה כי זה הדיפולט אבל רק לצורך הדוגמה בואו נראה שאנחנו בעצם יכולים לציין שבעצם היוזר ביטל את הפעולה ואז מיידית לבצע פיניש, כאן אנחנו לא צריכים להעביר שום אינטנט בסט
ריזולט הזה ומה שנשאר לנו לעשות זה לקלוט את הנתונים בחזרה במיין אקטיביטי ולבצע בהם שימוש כאן ראינו שאנחנו צריכים לגשת ולדרוס את הפונקציה onActivityResult את הפרוטקטד ואנחנו רוצים לבוא ולעשות דבר כזה.
בתוך הפונקציה הזאתי אנחנו רוצים לבדוק האם בעצם אנחנו גם קיבלנו ריזולט אוקיי וגם הביאו לנו איזשהו ריקווסט קוד מתאים ובדיוק פה הולך להיות שימוש גם בריזולט וגם בריקווסט.