Com o carregamento lento e a paginação, é possível oferecer suporte a grandes listas de itens, incluindo uma lista infinita, no app carregando e exibindo dados de forma incremental. Essa técnica permite reduzir os tempos de carregamento iniciais e otimizar o uso da memória, melhorando o desempenho.
Compatibilidade de versões
Essa implementação exige que o minSDK do projeto seja definido como nível 21 da API ou mais recente.
Dependências
Mostrar conteúdo paginado
Com a biblioteca Paging, é possível carregar e mostrar páginas de dados de um conjunto de dados maior adquirido do armazenamento local ou da rede. Use o código abaixo para mostrar uma lista paginada que mostra uma barra de progresso para indicar ao usuário que mais dados estão sendo buscados:
@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) } } } }
Pontos principais sobre o código
LazyColumn
: esse elemento combinável é usado para mostrar uma lista grande de itens (mensagens) de maneira eficiente. Ele renderiza apenas os itens que estão visíveis na tela, economizando recursos e memória.- O objeto
lazyPagingItems
gerencia de maneira eficiente o carregamento e a apresentação de dados paginados noLazyColumn
. Ele transmiteLazyPagingItems
paraitems
no elemento combinávelLazyColumn
. MessageRow(message: Text)
é responsável por renderizar itens de mensagem individuais, provavelmente mostrando o remetente e o texto da mensagem em um card.- O
MessagePlaceholder()
fornece um marcador visual (um ícone de carregamento) enquanto os dados da mensagem são buscados, melhorando a experiência do usuário.
Resultados
O vídeo a seguir mostra o comportamento resultante de uma lista grande que busca dados à medida que o usuário rola a tela.
Coleções que contêm este guia
Este guia faz parte destas coleções selecionadas de guias rápidos que abrangem metas mais amplas de desenvolvimento para Android:
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=pt-br)
Mostrar uma lista ou grade
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=pt-br)
Mostrar componentes interativos
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=pt-br)