O RecyclerView é um componente de visualização que facilita a exibição eficiente de
grandes conjuntos de dados. Em vez de criar visualizações para cada item no conjunto de dados,
o RecyclerView melhora o desempenho do app mantendo um pequeno pool de
visualizações e reciclando-as conforme você rola por esses itens.
No Compose, é possível usar listas lentas para fazer o mesmo. Nesta página,
descrevemos como migrar sua implementação de RecyclerView para usar listas lentas
no Compose.
Etapas da migração
Para migrar sua implementação de RecyclerView para o Compose, siga estas etapas:
Comente ou remova o
RecyclerViewda hierarquia da interface e adicione umComposeViewpara substituí-lo, caso ainda não haja um na hierarquia. Este é o contêiner da lista Lazy que você vai adicionar:<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- <androidx.recyclerview.widget.RecyclerView--> <!-- android:id="@+id/recycler_view"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="match_parent />"--> <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>Determine o tipo de elemento combinável de lista lenta necessário com base no gerenciador de layout da sua
RecyclerView(consulte a tabela abaixo). A função combinável selecionada será a de nível superior doComposeViewque você adicionou na etapa anterior.LayoutManagerElemento combinável
LinearLayoutManagerLazyColumnouLazyRowGridLayoutManagerLazyVerticalGridouLazyHorizontalGridStaggeredGridLayoutManagerLazyVerticalStaggeredGridouLazyHorizontalStaggeredGrid// recyclerView.layoutManager = LinearLayoutManager(context) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { // We use a LazyColumn since the layout manager of the RecyclerView is a vertical LinearLayoutManager } }
Crie um elemento combinável correspondente para cada tipo de visualização na implementação
RecyclerView.Adapter. Cada tipo de visualização normalmente é mapeado para uma subclasseViewHolder, embora nem sempre seja o caso. Esses elementos de composição serão usados como a representação da interface para diferentes tipos de elementos na lista:@Composable fun ListItem(data: MyData, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth()) { Text(text = data.name) // … other composables required for displaying `data` } }
A lógica nos métodos
onCreateViewHolder()eonBindViewHolder()doRecyclerView.Adapterserá substituída por esses elementos combináveis e pelo estado que você fornecer a eles. No Compose, não há separação entre criar um elemento combinável para um item e vincular dados a ele. Esses conceitos são unificados.No slot
contentda lista lenta (o parâmetro lambda final), use a funçãoitems()(ou uma sobrecarga equivalente) para iterar os dados da lista. Na lambdaitemContent, invoque o item combinável adequado para seus dados:val data = listOf<MyData>(/* ... */) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { items(data) { ListItem(it) } } }
Casos de uso comuns
Decorações de itens
A RecyclerView tem o conceito de ItemDecoration, que pode ser usado para adicionar um
desenho especial para itens na lista. Por exemplo, é possível adicionar um
ItemDecoration para adicionar divisores entre os itens:
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
O Compose não tem um conceito equivalente de decorações de itens. Em vez disso, você
pode adicionar qualquer decoração de IU da lista diretamente na composição. Por exemplo,
para adicionar divisores à lista, use o elemento de composição Divider depois de cada
item:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
Animações de itens
Um ItemAnimator pode ser definido em um RecyclerView para animar a aparência dos
itens conforme as mudanças são feitas no adaptador. Por padrão, o RecyclerView usa
DefaultItemAnimator, que fornece animações básicas em eventos de remoção, adição e
movimentação.
As listas lentas têm um conceito semelhante com o modificador animateItemPlacement.
Consulte Animações de itens para saber mais.
Outros recursos
Para mais informações sobre como migrar um RecyclerView para o Compose, consulte os
recursos abaixo:
- Listas e grades: documentação sobre como implementar listas e grades no Compose.
- Interoperabilidade do Jetpack Compose: como usar o Compose em uma RecyclerView (link em inglês):
postagem do blog sobre como usar o Compose de forma eficiente em uma
RecyclerView.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Listas e grades
- Migrar
CoordinatorLayoutpara o Compose - Outras considerações