התאמה אישית של רשימה דינמית בארגז הכלים 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ומחלקות המשנה שלו, כמוUriStringLong
מידע מפורט על סוגי מפתחות הבחירה זמין במאמר
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().
כדי לשמור על מצב הבחירה באירועים במחזור חיים של הפעילות, האפליקציה צריכה לקרוא ל-methods onSaveInstanceState() ו-onRestoreInstanceState() של מעקב הבחירה מה-methods onSaveInstanceState() ו-onRestoreInstanceState() של הפעילות, בהתאמה. האפליקציה צריכה גם לספק מזהה בחירה ייחודי ל-constructor של SelectionTracker.Builder. המזהה הזה נדרש כי לפעילות או למקטע יכולה להיות יותר מרשימה אחת נפרדת שניתן לבחור, וצריך לשמור את כולן במצב השמור שלהן.
מקורות מידע נוספים
מידע נוסף זמין במקורות המידע הבאים.
- אפליקציית ההדגמה Sunflower, שמשתמשת ב-
RecyclerView. - שימוש ב-RecyclerView להצגת רשימה שניתן לגלול ב-Codelab.
- Android Kotlin Fundamentals: RecyclerView fundamentals Codelab.