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

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

אתם יכולים להתאים אישית את האובייקטים בהתאם לצרכים הספציפיים שלכם.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. עדכון של אובייקטים מסוג item 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() של הפעילות, בהתאמה. בנוסף, האפליקציה צריכה לספק מזהה בחירה ייחודי לבונה SelectionTracker.Builder. המזהה הזה נדרש כי יכול להיות שלפעילות או לקטע יהיו יותר מרשימה אחת נפרדת שאפשר לבחור ממנה, וצריך לשמור את כל הרשימות האלה במצב השמור שלהן.

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

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