סקירה כללית של ספריית Paging בארגז הכלים Android Jetpack.
ספריית Paging עוזרת לכם לטעון ולהציג דפים של נתונים ממערך נתונים גדול יותר מאחסון מקומי או מרשת. הגישה הזו מאפשרת לאפליקציה להשתמש ברוחב הפס של הרשת ובמשאבי המערכת בצורה יעילה יותר. הרכיבים של ספריית Paging מתוכננים להתאים לארכיטקטורת האפליקציות המומלצת ל-Android, להשתלב בצורה חלקה עם רכיבי Jetpack אחרים ולספק תמיכה מעולה ב-Kotlin.
יתרונות השימוש בספריית Paging
ספריית ה-Paging כוללת את התכונות הבאות:
- שמירת נתונים בדפים במטמון בזיכרון. כך אפשר לוודא שהאפליקציה משתמשת במשאבי המערכת בצורה יעילה בזמן העבודה עם נתונים שמוצגים בדפים.
- ביטול כפילויות מובנה בבקשות, כדי לוודא שהאפליקציה משתמשת ברוחב פס ברשת ובמשאבי מערכת בצורה יעילה.
- תמיכה מלאה בשגרות המשך (coroutine) וב-Flows של Kotlin.
- תמיכה מובנית בטיפול בשגיאות, כולל יכולות רענון וניסיון חוזר.
הגדרה
כדי לייבא רכיבי Paging לאפליקציית Android, מוסיפים את התלויות הבאות לקובץ build.gradle של האפליקציה:
Kotlin
dependencies { val paging_version = "3.4.2" implementation("androidx.paging:paging-common:$paging_version") // Jetpack Compose integration implementation("androidx.paging:paging-compose:$paging_version") }
מגניב
dependencies { def paging_version = "3.4.2" implementation "androidx.paging:paging-common:$paging_version" // Jetpack Compose integration implementation "androidx.paging:paging-compose:$paging_version" }
ארכיטקטורת הספרייה
הרכיבים של ספריית Paging פועלים בשלוש שכבות של האפליקציה:
- שכבת המאגר
- שכבת
ViewModel - שכבת ממשק המשתמש
בקטע הזה מתוארים הרכיבים של ספריית Paging שפועלים בכל שכבה, ומוסבר איך הם פועלים יחד כדי לטעון ולהציג נתונים עם החלפה בין דפים.
שכבת מאגר
הרכיב העיקרי של ספריית Paging בשכבת המאגר הוא PagingSource. כל אובייקט PagingSource מגדיר מקור נתונים ואת אופן האחזור של הנתונים מהמקור הזה. אובייקט PagingSource יכול לטעון נתונים מכל מקור יחיד, כולל מקורות ברשת ומסדי נתונים מקומיים.
רכיב נוסף בספריית Paging שאפשר להשתמש בו הוא RemoteMediator. אובייקט RemoteMediator מטפל בהחלפה בין דפים ממקור נתונים בשכבות, כמו מקור נתונים ברשת עם מטמון של מסד נתונים מקומי.
שכבת ViewModel
הרכיב Pager מספק API ציבורי ליצירת מופעים של PagingData שנחשפים בזרמים ריאקטיביים, על סמך אובייקט PagingSource ואובייקט הגדרה PagingConfig.
הרכיב שמחבר את השכבה ViewModel לממשק המשתמש הוא PagingData. אובייקט PagingData הוא מאגר של תמונת מצב של נתונים עם מספור דפים. היא שולחת שאילתה לאובייקט PagingSource ומאחסנת את התוצאה.
שכבת ממשק המשתמש
ה-API הראשי של ממשק המשתמש של Paging הוא collectAsLazyPagingItems(). היא חושפת פריטים עם חלוקה לדפים כרשימת נתונים שרכיבי הפריסה העצלנית של Compose יכולים לעבד בקלות, כמו LazyColumn ו-LazyRow.
מוסיפים את ספריית androidx.paging:paging-compose כדי להשתמש בממשקי API שתואמים ל-Compose ומאפשרים לממשק המשתמש להגיב אוטומטית לטעינות נתונים, לעדכונים ולשגיאות בלי להשתמש במתאמים או בלוגיקה של השוואה. משתמשים בפונקציית ההרחבה collectAsLazyPagingItems() ב-Flow<PagingData> כדי להעביר את הערך המוחזר LazyPagingItems אל items() ב-LazyColumn.
@Composable fun MessageList(pager: Pager<Int, Message>) { val lazyPagingItems = pager.flow.collectAsLazyPagingItems() LazyColumn { items( lazyPagingItems.itemCount, key = lazyPagingItems.itemKey { it.id } ) { index -> val message = lazyPagingItems[index] if (message != null) { MessageRow(message) } else { MessagePlaceholder() } } } }
מידע נוסף זמין במאמר בנושא קבוצות גדולות של נתונים (החלפת דפים).
מומלץ בשבילך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- טעינה והצגה של נתונים עם חלוקה לדפים
- העברה ל-Paging 3
- דף מהרשת וממסד הנתונים