טעינה עצלה של נתונים באמצעות רשימות וחלוקה לדפים

בעזרת טעינת נתונים בזמן אמת (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 ב-composable‏ LazyColumn.
  • MessageRow(message: Text) אחראי על עיבוד פריטים ספציפיים של הודעות, וסביר להניח שהשולח והטקסט של ההודעה יוצגו בכרטיס.
  • MessagePlaceholder() מספק placeholder חזותי (סמל טעינה) בזמן אחזור נתוני ההודעה בפועל, וכך משפר את חוויית המשתמש.

תוצאות

בסרטון הבא מוצגת התוצאה של אחזור נתונים מרשימה גדולה בזמן שהמשתמש גולל.

אוספים שמכילים את המדריך הזה

המדריך הזה הוא חלק מהאוספים הבאים של מדריכים מהירים, שמכסים יעדים רחבים יותר לפיתוח Android:

רשימות ורשתות מאפשרות להציג באפליקציה קולקציות בצורה חזותית נעימה וקלה לשימוש למשתמשים.
איך פונקציות מורכבות מאפשרות ליצור בקלות רכיבי ממשק משתמש יפים על סמך מערכת העיצוב של Material Design.
בסדרת הסרטונים הזו נסביר על ממשקי API שונים של Compose, ונראה במהירות מה זמין ואיך משתמשים בהם.

יש לכם שאלות או משוב

אתם יכולים להיכנס לדף השאלות הנפוצות שלנו ולקרוא מדריכים מהירים, או ליצור איתנו קשר ולספר לנו מה דעתכם.