O RecyclerView
é um componente de visualização que facilita a exibição eficiente
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
e reciclar enquanto navega por esses itens.
No Compose, você pode usar listas lentas para fazer o mesmo. Esta página
descreve como migrar a implementação de RecyclerView
para usar listas lentas.
no Compose.
Etapas da migração
Para migrar a implementação do RecyclerView
para o Compose, siga estas etapas:
Comente ou remova a
RecyclerView
da hierarquia da interface e adicione umaComposeView
para substituí-la se nenhuma estiver presente na hierarquia ainda. Isso é o contêiner da lista lenta 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>
Determinar que tipo de elemento combinável de lista lenta é necessário com base no seu Gerenciador de layout de
RecyclerView
(consulte a tabela abaixo). O elemento combinável selecionado será o elemento combinável de nível superior doComposeView
adicionado no etapa anterior.LayoutManager
Elemento combinável
LinearLayoutManager
LazyColumn
ouLazyRow
GridLayoutManager
LazyVerticalGrid
ouLazyHorizontalGrid
StaggeredGridLayoutManager
LazyVerticalStaggeredGrid
ouLazyHorizontalStaggeredGrid
// 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 sua implementação de
RecyclerView.Adapter
. Cada tipo de visualização normalmente é mapeado para umaViewHolder
, embora esse nem sempre seja o caso. Esses combináveis serão usados como a representação da interface para diferentes tipos de elementos da sua 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 no
onCreateViewHolder()
daRecyclerView.Adapter
e Os métodosonBindViewHolder()
serão substituídos por esses elementos combináveis e as que você forneceu. 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 se una.No slot
content
da lista lenta (o parâmetro lambda final), use a funçãoitems()
(ou uma sobrecarga equivalente) para iterar pelas dados para sua lista. Na lambdaitemContent
, invoque o elemento combinável 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 usada para adicionar uma
um desenho especial para itens na lista. Por exemplo, é possível adicionar
ItemDecoration
para adicionar divisores entre 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,
pode adicionar qualquer decoração de IU da lista diretamente na composição. Por exemplo:
para adicionar divisores à lista, use o elemento combinável Divider
após cada
item:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { Divider() } } }
Animações de itens
Uma ItemAnimator
pode ser definida em uma RecyclerView
para animar a aparência do
conforme alterações forem feitas no adaptador. Por padrão, o RecyclerView
usa
DefaultItemAnimator
, que fornece animações básicas ao remover, adicionar e
eventos de movimento.
As listas lentas têm um conceito semelhante usando 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 a
seguintes recursos:
- Listas e grades: documentação sobre como implementar listas e grades no Escrever.
- Interoperabilidade do Jetpack Compose: como usar o Compose em uma RecyclerView:
Postagem do blog sobre o uso eficiente do Compose em uma
RecyclerView
.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Listas e grades
- Migrar
CoordinatorLayout
para o Compose - Outras considerações