PracticU

Custom ListView

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Custom ListView
מילון מושגים:
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
ArrayList - מבנה נתונים של רשימה דינמית שגודלה משתנה, הנפוץ בשפות כמו Java ו-C#.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
חבילה - אוסף ארוז של קוד, ספריות או קבצים המופץ כיחידה אחת ומותקן בעזרת מנהל חבילות.
View - רכיב שאחראי על הצגת המידע למשתמש (התצוגה) בדפוס MVC. גם טבלה וירטואלית מבוססת שאילתה במסד נתונים.
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.

Custom ListView
כשלפריט ברשימה יש יותר ממחרוזת, למשל שם, תיאור ותמונה, מגדירים איך כל שורה תיראה. בשיעור בונים רשימת חיות מעוצבת עם Adapter משלנו.
השלבים העיקריים
1. מחלקת הנתונים: Animal עם השדות type ו-description, גטרים וסטרים ו-toString, כולם נוצרו ב-Alt+Insert. מחלקת Repository מחזירה ArrayList<Animal>, ובאקטיביטי animals = Repository.getAnimals().
2. layout של שורה: קובץ item_animal עם RelativeLayout. בו ImageView בגודל 80dp על 80dp עם margin של 10dp, TextView של הסוג (גודל 30sp, כחול, מימין לתמונה) ו-TextView של התיאור (מתחת לסוג, מיושר אליו, גודל 20sp, ירוק).
3. תכונות tools: עם tools:src ו-tools:text רואים ערכי דוגמה רק במעצב, ובריצה הם לא משפיעים. התיאור מוגדר singleLine עם ellipsize בסוף, כדי להציג שלוש נקודות.
4. Adapter משלנו: AnimalsAdapter extends ArrayAdapter<Animal>. הקונסטרקטור מקבל Context ורשימה, וקורא ל-super(context, 0, animals), כי אין שימוש ב-layout הסטנדרטי. בנוסף שומרים LayoutInflater (מ-getSystemService(LAYOUT_INFLATER_SERVICE)), Resources ושם החבילה.
5. getView: נקראת אוטומטית לכל פריט ומחזירה את ה-View של השורה. מנפחים את R.layout.item_animal עם inflate(..., null), מאתרים את שלושת הרכיבים, מקבלים את הפריט עם getItem(position), ומחשבים את מזהה התמונה עם getResources().getIdentifier(type.toLowerCase(), "drawable", packageName).
6. מילוי: setImageResource(imageId), ו-setText לסוג ולתיאור. מחזירים את ה-layout.
7. חיבור באקטיביטי: new AnimalsAdapter(this, animals), setAdapter, ו-setOnItemClickListener שמציג Toast עם animals.get(position).toString().
שימו לב
- המערכת לא יכולה לדעת איך להציג אובייקט Animal, ולכן ArrayAdapter של מחרוזות לא מתאים כאן.
- שמות קובצי התמונות ב-drawable באותיות קטנות, כי הקוד מחשב את המזהה מהסוג באותיות קטנות.
אחרי השיעור אפשר להציג ב-ListView רשימה של אובייקטים משלכם, בעיצוב שורה חופשי.
השיעור הבא בקורס: List Activity

פרקי ההרצאה: Custom ListView

  1. 00:00

    רשימה מעוצבת ב-ListView

  2. 00:56

    מחלקת Animal עם Getters ו-Setters

  3. 02:57

    Repository שמחזיר רשימת חיות

  4. 04:59

    Layout לפריט בודד ברשימה

  5. 07:06

    תמונה לדיזיינר בלבד עם tools:src

  6. 08:01

    TextView לסוג החיה ולתיאור

  7. 10:34

    שורה אחת ושלוש נקודות בתיאור

  8. 11:40

    בניית Adapter משלנו

תמלול ההרצאה: Custom ListView

הטקסט המלא של הדקות הראשונות בהרצאה «Custom ListView» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אחרי שראינו איך אנחנו יכולים להציג רשימת פריטים בצורה פשוטה על רכיב ליסט ויו, בואו נראה איך אנחנו יכולים להציב רשימת פריטים אבל בצורה מעוצבת על ליסט ויו. מה זאת אומרת?

  2. 00:15

    זאת אומרת שאנחנו יכולים להגדיר איך ייראה כל פריט ופריט שמוצג בליסט ויו. בדרך כלל זה קורה כאשר לפריט יש יותר מסתם מחרוזת. אולי יש לו מחרוזת וגם ערך אינטג'רי וגם תמונה.

  3. 00:33

    דוגמא אם אנחנו לוקחים מוצר אז יש לו שם ויש לו מחיר ויש לו תמונה ויש לו אולי תיאור ואת כל הדברים האלה אנחנו רוצים להגדיר בצורה ויזואלית מעוצבת עבור כל אחד מהפריטים בואו ניקח את אותה דוגמה שעשינו עבור החיות ונראה איך אנחנו מציגים את החיות אבל בצורה מעוצבת אז דבר ראשון הגיוני שתהיה לנו מחלקה שמתארת חיה כי כנראה שיש לנו כמה פריטים שונים עבור

  4. 01:02

    animal אז בואו נבנה מחלקה חדשה ובואו נקרא לה animal ובואו נגדיר במחלקה הזאת את הדברים שיש לנו והמינימום שיש לנו זה private string סוג החיה type ובואו ניקח עוד string עבור לדוגמה תיאור החיה description אנחנו רוצים גתרים וסתרים ואנחנו יכולים ללחוץ על alt

  5. 01:32

    ו-insert ביחד ואז לבחור או בגטר או בסטר או בגטר אנד סטר. לבחור שאנחנו רוצים את שניהם, נבצע אוקיי ואוטומטית אנדרואיד סטודיו בונה לנו גם גטרים וגם סטרים עבור המחלקה.

  6. 01:50

    בואו נעשה את אותו הדבר עבור קונסטרקטור, הנה אנחנו רואים קונסטרקטור, אנחנו רוצים קונסטרקטור שיכיל את שני החבר'ה האלה אבל אנחנו רק צריכים לעבור דרך הסטרים, זה הדבר היותר נכון לבצע.

  7. 02:04

    בואו נקרא לסט טייפ אנחנו ממש בונים מחלקה שמתארת ישות טהורה ופשוטה סט דסקריפשן ניפטר מזה ובואו נלחץ עוד פעם אלט אינסרט ונבנה הפעם טוסטרינג אז אנחנו רוצים להחזיר הכל בטוסטרינג הנה כאן למטה לא לא למטה פה הוא בנה לנו את הטוסטרינג באזור הזה בואו נעביר את זה למטה שיהיה קצת יותר הגיוני ונעצב אותה קצת אחרת האמת בואו נחזיר את הטייפ משורשר עם ירידת שורה משורשר עם הדסקריפשן והנה סידרנו

  8. 02:50

    לעצמנו 2 סטרינג והמחלקה שמתארת חיה אחת מוכנה לנו שלחיה יש רק סוג החיה ותיאור החיה. הדבר הבא שאנחנו הולכים לבנות זה ריפוזיטורי של חיות בדיוק כמו שבנינו בסרטון של ה-Simple List View.

  9. 03:10

    בואו נגדיר פה מחלקה ריפוזיטורי ונבנה בתוך המחלקה הזאת איזושהי פונקציה סטטית public static שמחזירה array list, אבל הפעם כל פריט הוא מטיפוס animal. נקרא לפונקציה getAnimals, נגדיר array list של animal בתוך המחלקה, animal שווה new arraylist והפעם אני לא אשכח להחזיר אותו וכאן אנחנו צריכים למלא את ה-arraylist

  10. 03:50

    באובייקטים מסוג animal שלכל אובייקט יש type ויש description אז הכנתי מבעוד מועד סדרה של חיות עם type ו-description פשוט עשיתי copy paste מוויקיפדיה ומכל מיני אתרים והנה יש לנו description ו-type עבור כל חיה והריפוזיטורי מחזיר לנו אריי ליסט של חיות.

  11. 04:19

    כעת אנחנו יכולים לבוא למיין אקטיביטי, לבנות כאן אובייקט פרייבט אריי ליסט של אנימל, נקרא לו Animals שווה ריפוזיטורי getAnimals בצורה כזאת וכעת אנחנו יכולים להציג את כל החיות האלה בממשק שלנו.

  12. 04:43

    מה יש לנו בממשק? לממשק יש לנו בדיוק אותו הדבר כמו שהיה לנו מקודם הנה יש לנו פה למעלה את האנימלס שזה בעצם טקסט view עם כותרת והנה יש לנו פה את הליסט view הכל אותו הדבר אנחנו רק רוצים להציג את הפריטים מעוצבים כפי שאנחנו רוצים.

  13. 05:04

    אז מה שאנחנו צריכים לעשות זה פשוט לבנות layout שמתאר איך נראה פריט ברשימה זה מתבצע בתיקיית ה-layouts. בואו ניגש ונוסיף layout resource file ונקרא לו item underline animal והוא מתאר לנו איך נראה פריט שמחזיק חיה אחת.

  14. 05:31

    בואו ניגש לxml שלו, נוריד את זה, יש לנו פה linear layout ובואו נגדיר אותו כהוריזונטל ולא ורטיקל, לא, בעצם בואו נעשה אותו relative, נעשה אותו relative ואז יש לנו יותר שליטה על הפריטים השונים שקיימים בו.

  15. 05:54

    ומה אנחנו רוצים להציג אנחנו רוצים להציג סך הכל את מה שהיה לנו במחלקה במחלקה היה לנו סך הכל טייפ ודסקריפשן ובואו נציג גם תמונה לצורך כך בואו ניגש וניקח סדרה של תמונות הנה יש לנו פה תמונות שהכנתי נחזור בחזרה נדביק אותם בתוך דרובל יש לנו פה את התמונות וכעת אנחנו יכולים לבנות את הלייאוט שמתאר פריט בודד.

  16. 06:29

    הנה יש לנו כאן image view נגדיר שהוא יהיה 80 dp על 80 dp אנחנו רואים פה בצד את התמונה נגדיר id image view animal animal אחד ויחיד ניתן איזשהו margin שיהיה טיפה ריווח נניח 10 dps ואנחנו רוצים לראות איך הדבר הזה נראה כאן תוך כדי הבנייה.

  17. 07:06

    עכשיו אנחנו לא רוצים לגשת ולבצע src שווה drawable ולתת כאן איזושהי חיה לדוגמה פאפי למה כי אז כל פעם שפריט ייווצר בזמן ריצה בצורה דינמית אז המערכת קודם כל תיגש תיקח את התמונה הספציפית הזאת תשים ואז תחליף את זה בתמונה הסטנדרטית או הנוכחית שבאמת צריכה להיות מוצגת על הפריט הזה לכן ראינו בעבר שיש לנו איזשהו טריק ואנחנו יכולים במקום android.src לרשום tools.src ואנחנו רואים

  18. 07:43

    את הקו הזה זה אומר שאנחנו צריכים Alt Enter ואז המערכת יוצרת לנו את ה-Namespace המתאים ו-Tools אומר שאנחנו כן רואים את התמונה הזאת בדיזיינר אבל שום דבר לא קורה עם הפרופרטי הזה כאשר האפליקציה רצה ואז אוטומטית אנחנו מקבלים את התמונה הנוכחית האחת והיחידה שאמורה להיות מוצגת בפריט הזה

  19. 08:06

    ולא סתם תמונה פיקטיבית. בואו נייצר בנוסף טקסט view עבור הטייפ, נגדיר אותו כ-Rap Content, נגדיר ID טקסט view טייפ, נגדיר to write off שיהיה מצד ימין של אימג' ויו אנימל, ימינה מהאימג' ויו אנחנו רוצים אותו, בואו ניתן לו גם כן איזשהו מרג'ין 10 dps, נגדיר לו טקסט סייז 30 SP ונגדיר לו טקסט קולור

  20. 08:51

    בואו ניקח רד גרין ובלו שיהיה כחול ולבסוף טולס נקודותיים טקסט וניתן לו פאפי והנה אנחנו רואים שכאן מוצג הפאפי כל מה שנשאר לנו לעשות זה לשכפל ולהגדיר עוד אחד עבור הדסקריפשן בואו נשנה פה את השם לטקסט view description בצורה כזאת ואנחנו רוצים שהוא יקבל מאפיינים אחרים אנחנו רוצים שהוא יהיה מתחת ולא to write off אנחנו רוצים בלואו טקסט view type שהוא יהיה מתחתיו

  21. 09:42

    ובנוסף אנחנו רוצים to align left לטקסט view type ואז הוא כזה נמצא ממש מתחתיו. אין צורך במרג'ין כאן, אפשר להיפטר מהמרג'ין.

  22. 09:58

    טקסט סייז נגדיר קצת יותר קטן, בואו ניקח 20, זה ה-Description. צבע נגדיר אותו כ-Red, Green, Blue שיהיה צבע אחר, ירוק, בואו ניתן לו דסקריפשן ארוך ונראה איך הוא מוצג.

  23. 10:17

    בואו ניקח את הדסקריפשן האמיתי מהריפוזיטורי של פאפי. הנה הדסקריפשן, נעתיק את כל זה, קונטרול C, נחזור, קונטרול V, והנה יש לנו דסקריפשן ארוך וזה כאילו מה שאמור להיות מוצג וזה כמובן לא כל כך הגיוני כי הוא ממש גולש לי פה למטה.

  24. 10:40

    אז בואו ניקח איזשהו טריק מגניב ונבצע כזה דבר. נגדיר שsingle line זה true זאת אומרת שהוא תופס לנו רק שורה אחת ונגדיר שיהיה לנו אליפסיס בסוף בend שזה נראה לי הדפולט אבל נשאיר את זה ככה ואליפסיס זה שלושת הנקודות שאפשר לראות כאן אם אנחנו נתקרב אנחנו נראה פה שלוש נקודות ואנחנו יכולים להציב את זה בסוף מילה בסוף תו בתחילת המחרוזת בכל מיני

  25. 11:18

    מקומות. אז הנה יש לנו כאן את התמונה איך בעצם נראה פריט אחד ברשימה כאשר כל ההגדרות האלה זה הגדרות שרק הדיזיינר רואה אותן וזמן הריצה לא יבצע אותן אלא ישים את ההגדרות האמיתיות.

  26. 11:39

    אז סיימנו להגדיר את הממשק משתמש עבור פריט בודד. מה הדבר הבא שאנחנו צריכים לעשות? כאשר אנחנו התעסקנו עם simple list view אנחנו הלכנו ל-main אקטיביטי ואנחנו יצרנו כאן איזשהו אריי אדפטר.

  27. 11:57

    האריי אדפטר שיצרנו היה אריי אדפטר של סטרינג ואז האריי אדפטר החליט איך בדיוק להציג כל פריט ופריט בליסט ויו. אנחנו לא רוצים להשתמש עם סטרינג פשוט ולכן אנחנו לא יכולים להשתמש עם האריי אדפטר של סטרינג אלא אנחנו צריכים לבנות אריי אדפטר משלנו.

  28. 12:18

    למה? מפני שהמערכת לא יכולה לדעת אף פעם איך אנחנו בדיוק רוצים להציג כל פריט של אנימל האם אנחנו רוצים את הטייפ להציג כאן או האם אנחנו רוצים להציג אותו כאן ואיך בדיוק אנחנו מציגים את התמונה ומאיפה כלומר אם יש לנו איזשהו layout שמתאר פריט משלנו ואנחנו בנינו את ה-layout הזה אז אנחנו צריכים לבוא ולומר למערכת איך להציג את כל אחד מהפריטים ב-layout הזה וזה

  29. 12:49

    זה מתבצע על ידי בניית אדפטר משלנו והאדפטר משלנו יורש את האדפטר הרגיל של המערכת ומגדיר בדיוק איך הוא מציג את הפריטים. אז בואו נקרא לאדפטר הזה Animals Adapter, זאת פשוט מחלקה רגילה לגמרי ונבצע Extends ל-Array Adapter שהשתמשנו איתו מקודם אבל הפעם הוא יטפל ב-Animal עבור כל פריט ופריט.

  30. 13:27

    מה אנחנו רוצים להגדיר ב-Re-Adapter? קודם כל אנחנו צריכים להגדיר קונסטרקטור, אז בואו נגדיר לו Public Animal Adapter in הקונסטרקטור, והקונסטרקטור הזה צריך לקבל קונטקסט, כי אנחנו רוצים להעביר את זה ל-Parent, ArrayList של Animal, ובעצם שכחתי פה לרשום קונטקסט כמשתנה, פרייליסט של אנימל וזה יהיה כל האנימלס ואנחנו

  31. 14:05

    צריכים לגשת לבייס קונסטרקטור שלנו כלומר סופר ולשלוח לו כזה דבר הנה הקונטקסט שלנו פריט הבא שאנחנו צריכים לשלוח לו זה את ה-id של הלאוט הסטנדרטי שאנחנו מוסיפים ולדוגמה היה ה-simple layout item או סימפל צ'ק בוקס אייטם או כל הלאוטים האלה שהגדרנו בסרטון הקודם ובגלל שאנחנו לא מתעסקים כרגע עם עלי ההוצאה

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Simple ListView

ההרצאה הבאה: List Activity

הרצאות קשורות מקורסים אחרים

  • הסבר על Custom Dialogs
  • Custom Validators With Parameter
  • בניית Custom React Hook
  • יצירת מאפיין וולידציה - Custom Validator

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון