התאמה אישית של רשימה דינמית חלק מ-Android Jetpack.
אתם יכולים להתאים אישית את האובייקטים של 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
:
- קובעים באיזה סוג של מפתח בחירה להשתמש, ואז יוצרים
ItemKeyProvider
.יש שלושה סוגים של מפתחות שאפשר להשתמש בהם כדי לזהות פריטים שנבחרו:
Parcelable
וגם תתי-הסוגים שלו, כמוUri
String
Long
מידע מפורט על סוגי מפתחות בחירה זמין במאמר
SelectionTracker.Builder
. - מטמיעים את
ItemDetailsLookup
. - מעדכנים את אובייקטי הפריטים
View
ב-RecyclerView
כך שישקפו אם המשתמש בחר אותם או ביטל את הבחירה שלהם.בספריית הבחירות אין קישוט חזותי שמוגדר כברירת מחדל לפריטים שנבחרו. יש לציין את הערך הזה כשמפעילים את
onBindViewHolder()
. אנחנו ממליצים על הגישה הבאה:- ב-
onBindViewHolder()
, קוראים ל-setActivated()
– לא ל-setSelected()
– באובייקטView
עםtrue
אוfalse
, בהתאם לכך שהפריט נבחר. - מעדכנים את הסגנון של התצוגה כך שייצג את הסטטוס המופעל. מומלץ להשתמש במשאב של רשימת מצבי צבע כדי להגדיר את העיצוב.
- ב-
- משתמשים ב-
ActionMode
כדי לספק למשתמש כלים לביצוע פעולה על הבחירה. - לבצע פעולות משניות שפורשו.
- אספו את כל הפריטים באמצעות
SelectionTracker.Builder
. - כוללים את הבחירה באירועים של מחזור החיים של הפעילות.
ItemDetailsLookup
מאפשר לספריית הבחירות לגשת למידע על פריטים של RecyclerView
לפי MotionEvent
.
הוא למעשה מפעל למכונות ItemDetails
שמגובות על ידי מכונה של RecyclerView.ViewHolder
או מופקות ממנה.
כדי לקבל התראה כשהבחירה משתנה, צריך לרשום SelectionTracker.SelectionObserver
. כשהמבחר נוצר בפעם הראשונה, מפעילים את ActionMode
כדי להציג אותו למשתמש ולספק לו פעולות ספציפיות למבחר. לדוגמה, אפשר להוסיף לחצן מחיקה לסרגל ActionMode
ולחבר את החץ לאחור בסרגל כדי לנקות את הבחירה. כשהבחירה תהיה ריקה – אם המשתמש ינקה את הבחירה בפעם האחרונה – צריך לסיים את מצב הפעולה.
בסוף צינור עיבוד האירועים, הספרייה עשויה לקבוע שהמשתמש מנסה להפעיל פריט על ידי הקשה עליו, או שהוא מנסה לגרור פריט או קבוצה של פריטים שנבחרו. כדי להגיב לפרשנויות האלה, צריך לרשום את המאזין המתאים. למידע נוסף, ראו SelectionTracker.Builder
.
בדוגמה הבאה מוסבר איך להרכיב את החלקים האלה:
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()
.
כדי לשמור את מצב הבחירה באירועים במהלך מחזור החיים של הפעילות, האפליקציה צריכה להפעיל את השיטות onSaveInstanceState()
ו-onRestoreInstanceState()
של מעקב הבחירות מהשיטות onSaveInstanceState()
ו-onRestoreInstanceState()
של הפעילות, בהתאמה. האפליקציה צריכה גם לספק מזהה ייחודי לבחירה ל-constructor של SelectionTracker.Builder
. המזהה הזה נדרש כי לפעילות או לקטע יכולות להיות יותר מרשימת אחת נפרדת שניתן לבחור, וכל הרשימות האלה צריכות להישמר בסטטוס השמור שלהן.
מקורות מידע נוספים
מידע נוסף זמין במקורות המידע הבאים.
- אפליקציית ההדגמה Sunflower, שמשתמשת ב-
RecyclerView
. - שימוש ב-RecyclerView כדי להציג רשימה שניתן לגלול בה
- קורס ה-codelab יסודות Kotlin ל-Android: יסודות RecyclerView.