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

Con il caricamento lento 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 la memoria utilizzata, migliorando le prestazioni.

Risultati

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

Compatibilità delle versioni

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

Dipendenze

Visualizza i contenuti impaginati

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 impaginato che mostra una barra di avanzamento per indicare all'utente che sono in fase di recupero 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 sul codice

  • LazyColumn: questo composable viene utilizzato per visualizzare in modo efficiente un elenco di elementi di grandi dimensioni (messaggi). Esegue il rendering solo degli elementi visibili sullo schermo, risparmiando risorse e memoria.
  • L'oggetto lazyPagingItems gestisce in modo efficiente il caricamento e la presentazione dei dati impaginati all'interno di LazyColumn. Passa LazyPagingItems a items nel composable LazyColumn.
  • MessageRow(message: Text) è responsabile del rendering 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'icona di caricamento) durante il recupero dei dati effettivi del messaggio, migliorando l'esperienza utente.

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 una forma visivamente piacevole e facile da consultare per gli utenti.
Scopri come le funzioni componibili possono consentirti di creare facilmente bellissimi componenti UI basati sul sistema di progettazione Material Design.
Questa serie di video presenta varie API Compose, mostrandoti rapidamente cosa è disponibile e come utilizzarle.

Hai domande o feedback?

Vai alla nostra pagina delle domande frequenti e scopri le guide rapide oppure contattaci e facci sapere cosa ne pensi.