RecyclerView
è un componente View che semplifica la visualizzazione efficiente di grandi set di dati. Anziché creare visualizzazioni per ogni elemento nel set di dati,
RecyclerView
migliora le prestazioni della tua app mantenendo un piccolo pool di
visualizzazioni e riciclandole man mano che scorri gli elementi.
In Scrittura, puoi utilizzare le elenchi lazy per ottenere lo stesso risultato. In questa pagina viene descritto come eseguire la migrazione dell'implementazione di RecyclerView
per utilizzare le liste lazy in Compose.
Passaggi per la migrazione
Per eseguire la migrazione dell'implementazione di RecyclerView
a Compose:
Commenta o rimuovi
RecyclerView
dalla gerarchia dell'interfaccia utente e aggiungi unComposeView
per sostituirlo se non è ancora presente nella gerarchia. Questo è il container per l'elenco Lazy che aggiungerai:<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>
Determina il tipo di componente componibile dell'elenco lazy di cui hai bisogno in base al gestore del layout di
RecyclerView
(vedi la tabella di seguito). Il composable selezionato sarà il composable di primo livello diComposeView
che hai aggiunto nel passaggio precedente.LayoutManager
Componibile
LinearLayoutManager
LazyColumn
oLazyRow
GridLayoutManager
LazyVerticalGrid
oLazyHorizontalGrid
StaggeredGridLayoutManager
LazyVerticalStaggeredGrid
oLazyHorizontalStaggeredGrid
// recyclerView.layoutManager = LinearLayoutManager(context) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { // We use a LazyColumn since the layout manager of the RecyclerView is a vertical LinearLayoutManager } }
Crea un composable corrispondente per ogni tipo di visualizzazione nell'implementazione di
RecyclerView.Adapter
. In genere ogni tipo di visualizzazione viene mappato a una sottoclasseViewHolder
, anche se non sempre è così. Questi composabili verranno utilizzati come rappresentazione dell'interfaccia utente per diversi tipi di elementi nell'elenco:@Composable fun ListItem(data: MyData, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth()) { Text(text = data.name) // … other composables required for displaying `data` } }
La logica dei metodi
onCreateViewHolder()
eonBindViewHolder()
diRecyclerView.Adapter
verrà sostituita da questi composabili e dall' stato che fornisci. In Compose, non esiste alcuna separazione tra la creazione di un composable per un elemento e il relativo collegamento dei dati: questi concetti sono uniti.All'interno dello slot
content
dell'elenco lazy (il parametro lambda finale), utilizza la funzioneitems()
(o un sovraccarico equivalente) per eseguire l'iterazione dei dati per l'elenco. Nella lambdaitemContent
, invoca l'elemento composable appropriato per i tuoi dati:val data = listOf<MyData>(/* ... */) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { items(data) { ListItem(it) } } }
Casi d'uso comuni
Decorazioni degli articoli
RecyclerView
ha il concetto di ItemDecoration
, che puoi utilizzare per aggiungere un
disegno speciale per gli elementi nell'elenco. Ad esempio, puoi aggiungere un ItemDecoration
per aggiungere divisori tra gli elementi:
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
Compose non ha un concetto equivalente di decorazioni degli elementi. Puoi invece aggiungere eventuali decorazioni dell'interfaccia utente nell'elenco direttamente nella composizione. Ad esempio,
per aggiungere divisori all'elenco, puoi utilizzare il componibile Divider
dopo ogni
elemento:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
Animazioni degli elementi
Un ItemAnimator
può essere impostato su un RecyclerView
per animare l'aspetto degli elementi man mano che vengono apportate modifiche all'adattatore. Per impostazione predefinita, RecyclerView
utilizza
DefaultItemAnimator
che fornisce animazioni di base per gli eventi di rimozione, aggiunta e
spostamento.
Gli elenchi lazy hanno un concetto simile tramite il modificatore animateItemPlacement
.
Per scoprire di più, consulta Animazioni degli articoli.
Risorse aggiuntive
Per ulteriori informazioni sulla migrazione di un RecyclerView
a Compose, consulta le seguenti risorse:
- Elenchi e griglie: documentazione su come implementare elenchi e griglie in Compose.
- Interoperabilità di Jetpack Compose: utilizzo di Compose in un RecyclerView:
post del blog per utilizzare Compose in modo efficiente all'interno di un
RecyclerView
.
Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Elenchi e griglie
- Eseguire la migrazione di
CoordinatorLayout
a Scrivi - Altre considerazioni