
ListFragment במקום מ-Fragment, בדומה ל-ListActivity. ההרצאה בונה פרגמנט שמציגה רשימת חיות ומוסיפה אירוע לחיצה.AnimalsFragment רגילה. ב-layout משאירים רק ListView עם match_parent.ListActivity או ListFragment חובה לתת ל-ListView את ה-ID android:id/list, כי כך הם מוצאים את הרכיב ומאכלסים אותו אוטומטית.AnimalsFragment כך שתירש מ-ListFragment (גרסת ה-support).ArrayList<String> בשם animals ומביאים אותו מה-repository עם getAnimals. יוצרים ArrayAdapter<String> עם getContext(), ה-layout android.R.layout.simple_list_item_1 והרשימה, וקוראים ל-setListAdapter.onCreate ולא ב-onCreateView, כי onCreateView רצה הרבה פעמים (למשל בחזרה לפרגמנט אחרי החלפה) ואין צורך ליצור את האדפטר כל פעם.FrameLayout בשם frameLayoutContainer, ומוסיפים את הפרגמנט כש-savedInstanceState הוא null, עם commit.onListItemClick, ומציגים Toast עם animals.get(position). בהרצה לחיצה על panda או bunny מציגה את שמם.FrameLayout עצמו כאלמנט השורש של ה-layout, בלי layout אחר סביבו. התוצאה זהה.ListFragment.הטקסט המלא של הדקות הראשונות בהרצאה «List Fragment» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כשלמדנו על Activities, ראינו שישנה Activity מסוג List Activity. זאת אומרת, אם היינו רוצים להציג רשימה של פריטים על Activity, היינו יכולים לקחת רכיב List View ופשוט להציג בתוכו את הרשימה, ויכלנו גם שהActivity עצמה הייתה מסוג List Activity, או ליתר דיוק יורשת Activity מסוג List Activity.
כאשר אנחנו מתעסקים עם Fragments, יש לנו בדיוק את זה. כלומר, יש לנו ListFragment. אנחנו יכולים לרשת ListFragment במקום לרשת Fragment, כאשר אנחנו רוצים להציג בפרגמנט שלנו רשימה של פריטים.
אז בואו נראה איך נכון לבצע את זה. הדבר הראשון שאנחנו הולכים לעשות זה להוסיף Fragment רגילה לגמרי. בואו ניגש לפרגמנט, נוסיף Fragment חדשה ונקרא לה AnimalsFragment.
אנחנו רוצים להציג פשוט רשימה רגילה של חיות, שמות של חיות. בואו נבצע finish, ובואו נסדר טיפה את הקוד של הפריגמנט. כבר אנחנו הולכים להשתמש בו יותר.
נבצע פה קצת אסתטיקה בקוד, בצורה כזאת. הדבר הבא שאנחנו הולכים לעשות זה ללכת ל-layout של הפריגמנט. יש לנו פה Frame Layout, ובואו ניפטר פה מהTools, אנחנו לא נצטרך אותו, וניפטר מזה אנחנו לא נצטרך אותו, וכמובן מהText View, ומה שאנחנו רוצים לעשות זה לייצר רכיב List View, נגדיר אותו כMatch Parent, נגדיר אותו כMT Tag, ומה שאנחנו רוצים לעשות זה לתת לו ID.
עכשיו אם אתם זוכרים כאשר אנחנו עבדנו עם ListActivity, ה-ID היה חייב להיות ID ספציפי, זה לא כל ה-ID שאנחנו רוצים. אם אני לא משתמש ב-ListActivity או ב-ListFragment, אז אני יכול לתת איזה ID שאני רוצה, לאתר את הרכיב הזה ב-Java Code ולהכניס לתכו את הרשימה.
אם אני רוצה להשתמש ב-ListActivity או ב-ListFragment, ה-ID חייב להיות Android.id.id.list. למה זה ה-ID שחייב להיות? מפני שאנחנו רוצים שה-ListActivity, או במקרה שלנו הזה, ListFragment, ידעו להכלס אוטומטית את רכיב ה-ListView, ולכן הם מחפשים רכיב שזה בדיוק ה-ID שלו.
Good. מה אנחנו רוצים לעשות? אנחנו עכשיו רוצים לגשת ל-AnimalsFragment, ואנחנו לא רוצים לרשת מ-Fragment, אנחנו רוצים לרשת מ-ListFragment, נגדיר את זה בצורה כזאת, ניקח את ה-SupportV4, יותר חדש, ועכשיו אנחנו רוצים להכלס את ה-List במידע.
אז בואו נגדיר כאן באזור הגלובלי, Private ArrayList, מסוג String, נקרא לו Animals, ויש לנו כאן Repository שהכנתי מקודם, שמכיל פשוט רשימה של חיות. בואו ניגש ונביא את הרשימה הזאת, repository נקודה, getAnimals, יחזיר לנו את כל החיות.
הדבר הבא שאנחנו רוצים לעשות זה ליצור אובייקט ArrayAdapter ולתת לו כמובן את הרשימה של החיות האלה, ואז אנחנו רוצים שהArrayAdapter הזה יציג את החיות בתוך רכיב ה-ListView שהגדרנו.
השאלה היא באיזה אירוע אנחנו עושים את זה. אנחנו יכולים לעשות את זה באירוע OnCreateView, אבל אם אתם זוכרים ב-LifeCycle של הפרגמנט, ראינו שהאירוע OnCreateView מתבצע הרבה פעמים.
גם כשעושים נניח החלפה של פרגמנט או מעבר לפרגמנט אחרת וחזרה לפרגמנט שלנו, אז גם אז האירוע OnCreateView מתבצע. ואנחנו לא רוצים כל כך הרבה פעמים לגשת וליצור את אובייקט הארי אדפטר ולהכלס בתוכו את הרשימה אנחנו רוצים לעשות את זה קצת פחות פעמים זאת אומרת אין צורך לבצע את זה כל פעם כש-on-create-view מתבצעת
ולכן אנחנו יכולים לעשות את זה באירוע on-create. זה בעצם אירוע טוב לבצע דברים שמתבצעים פחות פעמים מאשר האירוע on-create-view. לדוגמה אחד מהם זה יצירת אובייקט האדפטר ואיכלוס הרשימה. נשאיר כמובן את הקריאה לסופר
בואו ניצור פה ArrayAdapter, אנחנו מתעסקים עם סטרינגים אז הוא יהיה מסוג סטרינג, בואו נקרא לו Adapter, נבנה אובייקט חדש מסוג ArrayAdapter, אין צורך בסטרינג הזה ומה שאנחנו רוצים להעביר לו לקונסטרקטור, בואו נפתח כאן את הפרופרטיז, קודם כל והקונטקסט בפרגמנט יש לנו פונקציה שנקראת GetContext אז הנה כבר יש לנו object context הדבר הבא שאנחנו רוצים זה
איזה layout אנחנו רוצים להציג זה יהיה android.r.layout.simple.listItem1 זה layout מאוד פשוט להצגה והדבר האחרון זה מי הוא האוסף שברצה לנו להציג וזה animals good יש לנו כרגע את object adapter בגלל שאנחנו ירשנו את listFragment קיימת לנו הפונקציה setListAdapter ואנחנו
יכולים לשלוח אליה את אובייקט האדפטר.