Carica i dati in modo lazy con gli elenchi e la paginazione

Con il caricamento differito e la paginazione, puoi supportare elenchi di elementi di grandi dimensioni, incluso un elenco infinito, nella tua app caricando e visualizzando i dati in modo incrementale. Questa tecnica consente di ridurre i tempi di caricamento iniziali e ottimizzare l'utilizzo della memoria, migliorando le prestazioni.

Compatibilità delle versioni

Questa implementazione richiede che il valore minSDK del progetto sia impostato sul livello API 21 o superiore.

Dipendenze

Mostrare contenuti paginati

Con la libreria Paging, puoi caricare e visualizzare pagine di dati da un set di dati più grande acquisito dallo spazio di archiviazione locale o tramite una rete. Utilizza il seguente codice per visualizzare un elenco paginato che mostra una barra di avanzamento per indicare all'utente che vengono recuperati altri dati:

@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)
            }
        }
    }
}

Punti chiave del codice

  • LazyColumn: questo composable viene utilizzato per visualizzare in modo efficiente un elenco di elementi (messaggi) di grandi dimensioni. Viene visualizzato solo ciò che è visibile sullo schermo, risparmiando risorse e memoria.
  • L'oggetto lazyPagingItems gestisce in modo efficiente il caricamento e la presentazione dei dati paginati all'interno di LazyColumn. Passa LazyPagingItems a items nel componibile LazyColumn.
  • MessageRow(message: Text) è responsabile della visualizzazione dei singoli elementi del messaggio, probabilmente mostrando il mittente e il testo del messaggio all'interno di una scheda.
  • MessagePlaceholder() fornisce un segnaposto visivo (un'animazione di caricamento) durante il recupero dei dati effettivi del messaggio, migliorando l'esperienza utente.

Risultati

Il seguente video mostra il comportamento risultante di un elenco di grandi dimensioni che recupera i dati mentre l'utente scorre.

Raccolte che contengono questa guida

Questa guida fa parte di queste raccolte di guide rapide selezionate che coprono obiettivi di sviluppo Android più ampi:

Elenchi e griglie consentono alla tua app di mostrare le raccolte in un formato piacevole dal punto di vista visivo e facilmente fruibile dagli utenti.
Scopri come le funzioni composable possono aiutarti a creare facilmente magnifici componenti dell'interfaccia utente basati sul sistema di progettazione Material Design.
Questa serie di video introduce varie API Compose, mostrando rapidamente cosa è disponibile e come utilizzarle.

Domande o feedback

Visita la nostra pagina delle domande frequenti e scopri le guide rapide o contattaci per farci sapere cosa ne pensi.