
AnimalListFragment (Blank). ה-layout הוא LinearLayout אנכי עם ListView שה-ID שלו @android:id/list.ListFragment (גרסת support). מוגדרת ArrayList<Animal> שמתמלאת מ-Repository.getAnimals().onCreate יוצרים AnimalsAdapter עם הקונטקסט והרשימה וקוראים ל-setListAdapter.Callbacks עם onItemClick(Animal). ב-onListItemClick עושים casting של getActivity() ל-Callbacks וקוראים לפונקציה עם החיה לפי ה-position.LinearLayout אנכי עם TextView בשם textViewType (כותרת מודגשת, 30sp, ממורכז) ו-ScrollView עם TextView בשם textViewDescription (20sp), כדי שאפשר יהיה לגלול טקסט ארוך. מחרוזת הדגמה נוספת ל-strings.xml.strings.xml צריך להיכתב עם backslash לפניו, אחרת יש שגיאת קומפילציה. ה-backslash לא מוצג.TextView מוגדרים כמשתנים גלובליים, ונוסף שדה סטטי lastAnimal שמחזיק את החיה האחרונה שהוצגה, כך שגם כשעוברים מאקטיביטי נפרדת לאקטיביטי שמציגה את שניהם, אפשר להמשיך להציג אותה.displayAnimal(animal) מציבה את הסוג ואת התיאור, ושומרת ב-lastAnimal. אם החיה null לא עושים כלום.onCreateView קוראים ל-getArguments(). אם ה-Bundle אינו null, שולפים עם getSerializable("animal") וקאסטינג. אחרת מציגים את lastAnimal.putSerializable ומחזירה את הפרגמנט.הטקסט המלא של הדקות הראשונות בהרצאה «Master Details - Adding Fragments» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי אנחנו יכולים להוסיף את הפרגמנט הדרושים. הפרגמנט הראשונה שאנחנו רוצים להוסיף זה ה-Animal List Fragment. זאת שמציגה את רשימת הפריטים.
אז בואו ניגש לאפ, New Fragment ונוסיף Fragment Blank ופשוט נקרא לה Animal List Fragment. ניפטר משני הצ'קבוקסים האלה, נבצע פיניש, נסדר טיפה את הקוד, ניפטר כאן מכל השורות המיותרות כמו תמיד, ואנחנו יכולים לגשת לליאאוט של הפרגמנט, Animal List Fragment, ולראות מה אנחנו צריכים לבצע פה בכדי לעצב את הליאאוט כמו שצריך.
אז בואו ניקח איזה שהוא לינאר ליאאוט, ניפטר מאלה, נגדיר אותו כ-Orientation Vertical, למרות שזה פחות משנה, אבל זה משהו שהוא מאוד נפוץ.
ואנחנו רוצים ListView, כאשר בואו נבצע כבר את הפרגמנט שלנו כ-ListFragment. אז נגדיר אותו כ-MatchParent ו-RapContent. ניתן לו את ה-ID strudelAndroid.2 id slash list.
פטר מזה רק. ומה שאנחנו רוצים זה לגשת לפרגמנט עצמה, ולרשת את listFragment. אנחנו רוצים את ה-SupportLibrary, ופה למעלה אנחנו יכולים כבר להגדיר את ה-ArrayList, מסוג Animal, נקרא לו Animals, ונכניס לתחור את ה-Repository, GetAnimals.
כעת אנחנו רוצים להכלס את האדפטר, וראינו שכדאי לעשות את זה ב-onCreate. נשאיר את הקריאה לסופר. ניצור Animals Adapter. שווה New Animals Adapter.
ניתן לו את הקונטקסט שלנו ואת רשימת ה-Animals. ונכניס אותו לתוך ה-List. Set List Adapter. Animals Adapter.
כעת מה שאנחנו רוצים זה להוטט למיין אקטיביטי כאשר לחצו על פריט. נבנה אינטרפייס, נקרא לו callbacks, ונבנה בו איזושהי פונקציה שנקראת onItemClick. נשלח את האנימל שלחצו עליו, וכעת אנחנו יכולים לתפוס את האירוע הזה, onListItemClick, ופשוט לקרוא לפונקציה הזאת.
ניגש ונעשה קסטינג לכל באקס של GetActivity. ואז אנחנו יכולים לקרוא ל-OnItemClick, ומהאוסף של האנימלס לקבל לפי הפוזישן את האנימל שלחצו עליו. ופה למעשה סיימנו את ה-ListFragment שלנו.
אנחנו יכולים בשלב הזה לגשת ולצרף את הפרגמנט שמציגה Details. יש לנו פה Fragment ונקרא לפרגמנט Animal Details Fragment. בואו נצרף אותה, נלחץ על Finish, כמו תמיד ננקה טיפה את הקוד, יש לנו כאן את ה-onCreateView, שאנחנו כבר הולכים להשתמש איתו, אבל לפני זה בואו ניגש ונבנה את ה-layout עצמו.
הנה יש לנו את ה-FragmentAnimalDetails, ומה שאנחנו רוצים זה LinearLayout. ניפטר, בעצם את זה אנחנו נצטרך, כי אולי נציג מידע לגבי כל אחד. OrientationVertical, והכל מוכן.
אנחנו רוצים שיהיה לנו איזה שהוא TextView, ניקח Wrap Content, נגדיר רק שהכל נמצא במרכז Gravity, ניתן Center Horizontal, ככה שכל המידע יישב בדיוק במרכז של המסך בחינה הוריזנטלית, אנחנו חייבים ID, מפני שהמידע צריך להיכנס בצורה דינמית, TextView, והTextView הראשון זה
הסוג של החיה, השם שלה בעצם. לאחר מכן יש לנו פה איזה margin שכדאי לתת. אנחנו רוצים שהטקסט style בוא נניח יהיה bold. טקסט style הכוונה, כך שלפחות הכותרת השם של החיה היא בבולד.
טקסט size בוא נגדיר גדול יחסית 30 SP. ניתן איזשהו טקסט קולור, אותו הדבר כמו שהענו מקודם, red, green, blue. ויש לנו כאן טקסט puppy, כאשר שוב פעם נחליף לטולז puppy.
והנה יש לנו קודם כל את הכותרת. הדבר הבא שאנחנו רוצים זה scroll view, מפני שהמלל יכול להיות רב מדי ואנחנו נרצה איזושהי גלילה. ניתן כאן match parent, גם פה ניתן margin של 10 dp, ואנחנו רוצים פה text view.
הטקסט view שאנחנו רוצים גם הוא match parent, שהיא תפוס הכל, חובה id, נגדיר לו text view description, ואנחנו רוצים TextSize ניקח רק 20 SP ו Tools Text ניתן איזושהי מכרוזת ולצורך כך בואו נעצר לעצמנו איזושהי מכרוזת ב-Strings בדיוק פה אנחנו יכולים להוסיף עוד מכרוזת זה תמיד אפשר להיפטר כי
זה המכרוזת של הפרגמנט אז בואו ניגש ל-Repository נעתיק את המחרוזת של הפאפי, נבצע Ctrl-C, נחזור בחזרה לסטרינגס, נשכפל, נגדיר כאן שהשם ופאפי, וניתן את המחרוזת הזאת.
עכשיו, שימו לב רק שאם יש לכם מכרוזת שנמצאת בתוך הסטרינגס, אז אנחנו צריכים to escape special characters. אז מה זה אומר? זה אומר שאם יש לנו לדוגמה גרש, ואתם רואים שפה יש לנו איזה שהוא גרש, אנחנו צריכים לבצע backslash לפני הגרש הזה, כי אחר את זה יהיה לנו שגיעת קומפילציה.
אז בפועל, הבקסלש הזה לא יוצג כמובן, ויוצג לנו רק הגרש. אז בואו נלך לסטרינג, פאפי, והכל בסדר, אנחנו רואים כאן את המידע עצמו, ואנחנו יכולים פה אפילו לראות את הגרש האחד והיחיד, מבלי ה-backslash המיוחד שנמצא לפניו.
אוקיי, אז נראה לי שזה בעצם סוגר לנו את העיצוב של ה-details-fragment, ואנחנו יכולים בשלב הזה לגשת ולבנות את הקוד של ה-fragment. ננקה פה טיפה, ניגש לאנימל-details, מה אנחנו צריכים לעשות בקוד עצמו.
אז בקוד עצמו אנחנו רוצים שיהיה לנו את הדאטה עצמם של הרכיבים של ה-UI שאנחנו רוצים. אז קודם כל, בגלל שאנחנו רוצים להכניס את המידע בכל מיני מקרים שונים לפרגמנט, כלומר, גם אם אנחנו נמצאים באקטיביטי נפרדת וגם אם אנחנו נמצאים באותה אקטיביטי שהפרגמנט מוצגת ביחד עם הפרגמנט השנייה של הרשימה, אנחנו כל הזמן רוצים לשמור על המידע
הזה, אז מה שכדאי לבצע זה כמה דברים. דבר ראשון, הרכיבי UI שלנו