בעזרת טעינת נתונים בזמן אמת (lazy loading) ודפים, אפשר לתמוך ברשימות גדולות של פריטים באפליקציה – כולל רשימה אינסופית – על ידי טעינת הנתונים והצגתם באופן מצטבר. הטכניקה הזו מאפשרת לקצר את זמני הטעינה הראשוניים ולבצע אופטימיזציה של השימוש בזיכרון, וכך לשפר את הביצועים.
תאימות גרסאות
כדי להטמיע את הקוד הזה, צריך להגדיר את minSDK של הפרויקט לרמת API 21 ואילך.
יחסי תלות
הצגת תוכן שמחולק לדפים
באמצעות ספריית הפידים אפשר לטעון ולהציג דפי נתונים ממערך נתונים גדול יותר שנרכש מאחסון מקומי או דרך רשת. אפשר להשתמש בקוד הבא כדי להציג רשימה מחולקת לדפים עם סרגל התקדמות, שמציין למשתמש שעוד נתונים נשלפים:
@Composable fun MessageList( modifier: Modifier, 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() } } } @Composable fun MessagePlaceholder(modifier: Modifier) { Box( Modifier .fillMaxWidth() .height(48.dp) ) { CircularProgressIndicator() } } @Composable fun MessageRow( modifier: Modifier, message: Message ) { Card(modifier = Modifier.padding(8.dp)) { Column( modifier = Modifier.padding(8.dp), verticalArrangement = Arrangement.Center ) { Text(message.sender) Text(message.text) } } } }
נקודות עיקריות לגבי הקוד
LazyColumn
: הרכיב הזה משמש להצגה יעילה של רשימה גדולה של פריטים (הודעות). הוא מרינדר רק את הפריטים שגלויים במסך, וכך חוסך משאבים וזיכרון.- האובייקט
lazyPagingItems
מנהל ביעילות את הטעינה והצגה של נתונים שמחולקים לדפים ב-LazyColumn
. הוא מעביר אתLazyPagingItems
אלitems
ב-composableLazyColumn
. MessageRow(message: Text)
אחראי על עיבוד פריטים ספציפיים של הודעות, וסביר להניח שהשולח והטקסט של ההודעה יוצגו בכרטיס.MessagePlaceholder()
מספק placeholder חזותי (סמל טעינה) בזמן אחזור נתוני ההודעה בפועל, וכך משפר את חוויית המשתמש.
תוצאות
בסרטון הבא מוצגת התוצאה של אחזור נתונים מרשימה גדולה בזמן שהמשתמש גולל.
אוספים שמכילים את המדריך הזה
המדריך הזה הוא חלק מהאוספים הבאים של מדריכים מהירים, שמכסים יעדים רחבים יותר לפיתוח Android:
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=he)
הצגת רשימה או רשת
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=he)
הצגת רכיבים אינטראקטיביים
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=he)