התאמה אישית של רשימה דינמית חלק מ-Android Jetpack.

כדאי לנסות את התכונה 'כתיבה מהירה'
Jetpack Compose היא ערכת הכלים המומלצת לבניית ממשק משתמש ב-Android. איך עובדים עם פריסות ב-Compose

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

שינוי הפריסה

RecyclerView משתמש במנהל פריסה כדי למקם את הפריטים השונים במסך ולהחליט מתי לעשות שימוש חוזר בתצוגות של פריטים שכבר לא גלויים למשתמש. כדי לעשות שימוש חוזר בתצוגה – או למחזר אותה – מנהל הפריסה עשוי לבקש מהמתאם להחליף את תוכן התצוגה באלמנט אחר ממערך הנתונים. שימוש חוזר בתצוגות בדרך הזו משפרת את הביצועים, כי כך אפשר להימנע מיצירה של תצוגות מיותרות או מביצוע של חיפושים findViewById() יקרים. ספריית התמיכה של Android כוללת שלושה מנהלי פריסה רגילים, לכל אחד מהם יש אפשרויות רבות להתאמה אישית:

  • LinearLayoutManager: סידור הפריטים ברשימה חד-מימדית. שימוש ב-RecyclerView עם LinearLayoutManager מספק פונקציונליות כמו פריסה של ListView.
  • GridLayoutManager: הפריטים מסודרים בתצוגת רשת דו-מימדית, כמו ריבועים בשחמט. שימוש ב-RecyclerView עם GridLayoutManager מספק פונקציונליות כמו פריסה של GridView.
  • StaggeredGridLayoutManager: הפריטים מסודרים בתצוגת רשת דו-מימדית, כאשר כל עמודה מוסטת מעט מהעמודה שלפניה, כמו הכוכבים בדגל ארה"ב.

אם מנהלי הפריסה האלה לא מתאימים לצרכים שלכם, תוכלו להרחיב את הכיתה המופשטת RecyclerView.LayoutManager משלכם.

הוספת אנימציות לפריטים

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

הפעלת בחירה של פריטים מהרשימה

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

כדי להוסיף תמיכה בבחירה למכונה של RecyclerView:

  1. קובעים באיזה סוג של מפתח בחירה להשתמש, ואז יוצרים ItemKeyProvider.

    יש שלושה סוגים של מפתחות שאפשר להשתמש בהם כדי לזהות פריטים שנבחרו:

    מידע מפורט על סוגי מפתחות בחירה זמין במאמר SelectionTracker.Builder.

  2. הטמעה של ItemDetailsLookup.
  3. ItemDetailsLookup מאפשר לספריית הבחירות לגשת למידע על פריטים של RecyclerView לפי MotionEvent. הוא למעשה מפעל למכונות ItemDetails שמגובות על ידי מכונה של RecyclerView.ViewHolder או מופקות ממנה.

  4. מעדכנים את האובייקטים של הפריט View ב-RecyclerView כך שישקף אם המשתמש בוחר אותם או מבטל את הבחירה בהם.

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

    • ב-onBindViewHolder(), קוראים ל-setActivated()לא ל-setSelected() – באובייקט View עם true או false, בהתאם לכך שהפריט נבחר.
    • מעדכנים את הסגנון של התצוגה כך שייצג את הסטטוס המופעל. מומלץ להשתמש במשאב של רשימת מצבי הצבעים כדי להגדיר את הסגנון.
  5. אפשר להשתמש ב-ActionMode כדי לספק למשתמש כלים לביצוע פעולה לגבי הבחירה.
  6. כדי לקבל התראה כשהבחירה משתנה, צריך לרשום SelectionTracker.SelectionObserver. כשהמבחר נוצר בפעם הראשונה, מפעילים את ActionMode כדי להציג אותו למשתמש ולספק לו פעולות ספציפיות למבחר. לדוגמה, אפשר להוסיף לחצן מחיקה לסרגל ActionMode ולחבר את החץ לאחור בסרגל כדי לנקות את הבחירה. כשהבחירה תהיה ריקה – אם המשתמש ינקה את הבחירה בפעם האחרונה – צריך לסיים את מצב הפעולה.

  7. ביצוע פעולות משניות שפורשו.
  8. בסוף צינור עיבוד האירועים לעיבוד אירועים, הספרייה עשויה לקבוע שהמשתמש מנסה להפעיל פריט, על ידי הקשה עליו או שהוא מנסה לגרור פריט או קבוצה של פריטים שנבחרו. יש להגיב לביטויים האלה על ידי רישום המאזינים המתאימים. למידע נוסף, ראו SelectionTracker.Builder.

  9. אספו את כל הפריטים באמצעות SelectionTracker.Builder.
  10. בדוגמה הבאה מוסבר איך להרכיב את החלקים האלה:

    Kotlin

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    Java

        SelectionTracker tracker = new SelectionTracker.Builder<>(
                "my-selection-id",
                recyclerView,
                new StableIdKeyProvider(recyclerView),
                new MyDetailsLookup(recyclerView),
                StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build();
        

    כדי ליצור מכונה של SelectionTracker, האפליקציה צריכה לספק את אותו RecyclerView.Adapter שבו משתמשים כדי לאתחל את RecyclerView ל-SelectionTracker.Builder. לכן, אחרי שיוצרים את המכונה SelectionTracker, צריך להחדיר אותה ל-RecyclerView.Adapter. אחרת, לא תוכלו לבדוק את הסטטוס שנבחר של פריט באמצעות השיטה onBindViewHolder().

  11. כוללים את הבחירה באירועים של מחזור החיים של הפעילות.
  12. כדי לשמור את מצב הבחירה באירועים במהלך מחזור החיים של הפעילות, האפליקציה צריכה להפעיל את השיטות onSaveInstanceState() ו-onRestoreInstanceState() של מעקב הבחירות מהשיטות onSaveInstanceState() ו-onRestoreInstanceState() של הפעילות, בהתאמה. האפליקציה שלך צריכה גם לספק מזהה בחירה ייחודי ל-constructor של SelectionTracker.Builder. המזהה הזה נדרש כי לפעילות או לקטע יכולות להיות יותר מרשימת אחת נפרדת שניתן לבחור, וכל הרשימות האלה צריכות להישמר בסטטוס השמור שלהן.

מקורות מידע נוספים

מידע נוסף זמין במקורות המידע הבאים.