
AnimalFragment. ב-layout נותנים ל-ImageView ול-TextView ID כלליים (imageViewAnimal, textViewAnimal), בלי תמונה וטקסט קבועים.onCreateView קוראים ל-getArguments(). הוא עלול להיות null אם לא נשלח כלום, ולכן בודקים לפני שמושכים נתונים.getInt עבור imageId ו-getString עבור description. את ה-ImageView ואת ה-TextView משיגים דרך findViewById על ה-layout root ושומרים במשתנים גלובליים.displayAnimal(imageId, description) קוראת ל-setImageResource ול-setText. היא משמשת גם בתוך onCreateView, וגם מבחוץ כדי להחליף מידע בפרגמנט קיימת.AnimalFragment, Bundle, putInt עם R.drawable.bunny, putString עם getResources().getString(R.string.bunny), ומעבירים עם setArguments.animalFragment.displayAnimal עם נתוני הפאפי, והתצוגה מתחלפת.newInstance: פונקציה סטטית ציבורית במחלקת הפרגמנט, שמקבלת imageId ו-description, בונה את הפרגמנט ואת ה-Bundle, מעבירה אותו ומחזירה את הפרגמנט. במיין אקטיביטי קוראים רק AnimalFragment.newInstance(R.drawable.bunny, ...).newInstance צריך ארבעה צעדים: ליצור פרגמנט, ליצור Bundle, למלא אותו ולהעביר עם setArguments. השיטה הזו מצמצמת הכול לשורה אחת.הטקסט המלא של הדקות הראשונות בהרצאה «שליחת מידע ל-Fragment» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כשאנחנו משתמשים עם פרגמנטס, יכול להיות מצב שאנחנו רוצים להעביר לפרגמנט שלנו פרמטרים. הדבר הזה יכול להתבצע לפני שאנחנו מציגים את הפרגמנט, ויכול להתבצע אחרי שכבר הפרגמנט מוצגת, ואנחנו רוצים להעביר אליה מידע חדש.
בסרטון הזה אנחנו הולכים לראות איך נכון להעביר לפרגמנט פרמטרים. אז בסרטונים הקודמים של הפרגמנטס, היו לנו שני פרגמנטס. אחד שמציג מידע לגבי בני, ואחר שמציג מידע לגבי פאפי.
והמידע שהיה מוצג כאן, זה ממש מידע שהוצג ב-layout עצמו. אנחנו ממש רואים תמונה של בני, ואנחנו רואים טקסט לתיאור בני, וכאשר אנחנו עוברים לפאפי, גם כן, יש פה תמונה ספציפית של פאפי, ויש פה טקסט ספציפי של פאפי.
אוקיי, אז בואו נשנה את כל האפליקציה הזאת, כך שיהיה לנו פרגמנט אחת ויחידה שתציג לנו מידע על חיה כלשהי, אבל היא תקבל את המידע מבחוץ. לצורך כך, בואו ניפטר מאחת מהפרגמנטים, בואו ניפטר מהפאפי לדוגמה, נבצע delete ונמחק גם את ה-layout, ויש לנו רק את הבני.
עכשיו אנחנו לא רוצים להגדיר כאן ממש בני, אז מה שנעשה זה קודם כל נגדיר איזשהו ID לתמונה, ImageViewAnimal, כך שהתמונה הזאת תהיה ממש תמונה כללית, כנל לטקסט View, ID, TextViewAnimal.
הדבר הבא שאנחנו רוצים זה אנחנו לא רוצים את התמונה של הבני, ואנחנו לא רוצים את הטקסט של הבני, מפני שאנחנו רוצים להגדיר את זה בקוד. את ה-100DP אנחנו יכולים לשנות ל-RapContent, והכנו את ה-Layout של ה-Framework, של סליחה, של ה-Fragment של Bani.
אבל אנחנו רוצים לשנות גם את השמות האלה, בואו נעשה את זה לידי Shift-6 ל-AnimalFragment. שינינו כאן את ה-Code של ה-Java, בואו Shift-6 על ה-Layout של ה-Fragment, נקרא לזה Fragment Animal, בצורה כזאת.
ויש לנו עכשיו ממש Fragment שמכילה תמונה ומכילה טקסט, מבלי להכיל את התמונה בדיזיינטיים, ומבלי להכיל את הטקסט בדיזיינטיים. אנחנו עכשיו רוצים לגשת לג'אבקוד.
אנחנו יודעים שכאשר יוצרים אובייקט פרגמנט, מופעל האירוע OnCreateView. כאן אנחנו מקבלים אובייקט מהליאאוט, ואנחנו יכולים כאן להציב את המידע שאנחנו מקבלים מהעולם החיצון.
אז בואו נראה איך אנחנו מקבלים מידע מהעולם החיצון. המידע מהעולם החיצון מגיע על ידי בנדל, ומה שאנחנו צריכים לעשות זה פשוט לקבל את הבנדל שהעולם החיצון שולח לנו.
מה זה אומר העולם החיצון? כרגע זה הולך להיות המיין אקטיביטי שהולכת ליצור אובייקט מהפרגמנט שלנו. אז היא הולכת להעביר לנו איזשהו בנדל, ואנחנו הולכים לקבל אותו על ידי getArguments.
getArguments אנחנו רואים כאן, מחזירה לנו את הבנדל, שמי שיצר את אובייקט הפרגמנט יכול לשלוח לנו. הוא לא חייב לשלוח לנו את זה, הוא יכול לשלוח את הבנדל.
יכול להיות שיוצרים אובייקט מהאנימל פרגמנט ולא מביאים לנו כלום. אז אנחנו כאן כדאי שנבדוק האם הבנדל שונה מנהל. רק אם הבנדל שונה מנהל, אנחנו יודעים שהביאו לנו אובייקט בנדל אמיתי, ואנחנו כמובן רוצים להיכנס ולשלוף ממנו את הנתונים.
מה אנחנו רוצים לעשות עם הנתונים האלה? אנחנו רוצים להציב אותם בתוך האובייקטים של הלארט, בתוך ה-image view ובתוך ה-text view. לצורך כך, בואו ניגש כאן לאזור הגלובלי, ונבנה לעצמנו את האובייקטים עצמם.
הנה ה-image-view, נקרא לו image-view-animal, והנה private-text-view, נקרא לו text-view-animal. והשאלה היא, איך אנחנו משיגים את האובייקטים עצמם?
אז אנחנו צריכים להשיג אותם על ידי אובייקט ה-layout. אובייקט הלאאוט הזה שאנחנו רואים כאן, זה כמובן הלאאוט הזה, הרוט לאאוט של הפרגמנט.
אם יש לנו את אובייקט הלאאוט של הפרגמנט, אנחנו דרכו, לינאר לאוט רוט, יכולים to find view by id, לתת לו r.id. הנה ה-image-view-animal, ולהכניס אותו לתוך ה-image-view-animal.
בואו ניצור כאן אובייקט. נבצע קאסטינג מתאים, בצורה כזאת, ואנחנו רוצים את אותו הדבר לבצע ל-TextViewAnimal. יש לנו פה TextView, הנה אובייקט ה-LinearLayout, דרכו אנחנו מבצעים FindViewById, R.ID, TextViewAnimal.
לא היינו חייבים להגדיר את האובייקטים האלה באזור הגלובלי, יכלנו ממש כאן להגדיר את המשתנים, אם היינו רוצים להשתמש בהם רק בתוך הפונקציה onCreateView, אבל אנחנו נראה בהמשך שאנחנו הולכים להשתמש איתם גם מתוך פונקציה אחרת, ולכן לצורך הדוגמה העליתי אותם פה למעלה.
מה אנחנו רוצים לעשות במידה והביאו לנו פרמטרים? אנחנו יודעים שבנדל ובעצם איזשהו קולקשן שמכיל key וvalue, אז אנחנו רוצים לגשת לפריטים שיש בו על ידי ה-key ולשלוף מהם את ה-value.
מה בעצם אמורים להביא לנו? אמורים להביא לנו את הקוד של התמונה ואת הדסקריפשן, את התיאור. אז בואו ניגש לבנדל ונצפה לקבל אינטג'ר שה-ID שלו זה image ID.
הכי שלו זה image ID. בואו ניקח כאן זה שהוא int, image ID. והנה קיבלנו מהבנדל את הקוד של התמונה ששלחו לנו מבחוץ. עכשיו בואו נקבל את הדסקריפשן.
הנה יש לנו פה object description, ניגש שוב פעם לבנדל, get string, ונצפה שהkey יהיה description בצורה כזאת. כעת יש לנו גם את הimage id וגם את הדסקריפשן.
אז אנחנו רוצים עכשיו לשים את המידע בתוך הרכיבים הויזואליים. לצורך כך, בואו נבנה כאן פונציה, שנקראת displayAnimal, ונקבל imageId ו-description.
ופשוט ניגש ל-imageViewAnimal, setImageResource, הנה ה-imageId שקיבלנו, ניגש ל-textViewAnimal, נגדיר setTextDescription, והנה שמנו את הדסקריפשן, והפונקציה display animal אנחנו יכולים לקרוא לה מפה ולשלוח את ה-image ID ואת הדסקריפשן.
עכשיו שוב, לא היינו חייבים להשתמש בפונקציה נפרדת, יכלנו ממש כאן לבצע, בדיוק פה לבצע את ההסמה, וזה היה בסדר. למה אכן הגדרתי פונקציה נפרדת? כי ברגע שיש לנו פונקציה נפרדת ששימו לב שהיא public, זה מאפשר לעולם החיצון לקרוא לפונקציה ולשלוח מידע בלי קשר לבנדל שהיה חייב להיות כאשר יצרו אובייקט חדש מהפרגמנט.
אז זה בעצם שני דברים שונים, שתי שיטות שונות. אם יוצרים אובייקט חדש מהפרגמנט, מעבירים מידע דרך הבנדל, שכמובן עוד לא ראינו איך עושים את זה, כבר אנחנו עוברים למעין אקטיביטי ושולחים מידע אבל אם הפרגמנט כבר קיימת ואנחנו רק רוצים להחליף מידע
אין שום בעיה לקרוא לפונקציה שתחליף מידע אז יצרנו כאן איזושהי פונקציה display animal היא public אפשר לקרוא לה מבחוץ והשתמשנו איתה גם מכאן בשביל לבצע את ההסמה לרכיבים הויזואליים של הפרגמנט אז בעצם פה סיימנו עם הקוד של הפרגמנט, יש