RecyclerView adalah komponen View yang memudahkan untuk menampilkan kumpulan data dalam jumlah besar secara efisien. Daripada membuat tampilan untuk setiap item dalam set data,
RecyclerView meningkatkan performa aplikasi Anda dengan menyimpan kumpulan kecil
tampilan dan mendaur ulangnya saat Anda men-scroll item tersebut.
Di Compose, Anda dapat menggunakan Daftar lambat untuk melakukan hal yang sama. Halaman ini menjelaskan cara memigrasikan implementasi RecyclerView untuk menggunakan Daftar lambat di Compose.
Langkah migrasi
Untuk memigrasikan penerapan RecyclerView ke Compose, ikuti langkah-langkah berikut:
Beri komentar atau hapus
RecyclerViewdari hierarki UI Anda dan tambahkanComposeViewuntuk menggantikannya jika belum ada di hierarki. Ini adalah penampung untuk daftar Lazy yang akan Anda tambahkan:<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>Tentukan jenis composable Daftar lambat yang Anda butuhkan berdasarkan pengelola tata letak
RecyclerViewAnda (lihat tabel di bawah). Composable yang Anda pilih akan menjadi composable tingkat teratas dariComposeViewyang Anda tambahkan di langkah sebelumnya.LayoutManagerComposable
LinearLayoutManagerLazyColumnatauLazyRowGridLayoutManagerLazyVerticalGridatauLazyHorizontalGridStaggeredGridLayoutManagerLazyVerticalStaggeredGridatauLazyHorizontalStaggeredGrid// recyclerView.layoutManager = LinearLayoutManager(context) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { // We use a LazyColumn since the layout manager of the RecyclerView is a vertical LinearLayoutManager } }
Buat composable yang sesuai untuk setiap jenis tampilan dalam penerapan
RecyclerView.AdapterAnda. Setiap jenis tampilan biasanya dipetakan ke subclassViewHolder, meskipun tidak selalu demikian. Composable ini akan digunakan sebagai representasi UI untuk berbagai jenis elemen dalam daftar Anda:@Composable fun ListItem(data: MyData, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth()) { Text(text = data.name) // … other composables required for displaying `data` } }
Logika dalam metode
onCreateViewHolder()danonBindViewHolder()RecyclerView.Adapterakan digantikan oleh composable ini dan status yang Anda berikan kepada composable tersebut. Di Compose, tidak ada pemisahan antara membuat composable untuk item dan mengikat data ke dalamnya—konsep ini digabungkan.Dalam slot
contentdari daftar Lazy (parameter lambda akhir), gunakan fungsiitems()(atau kelebihan beban yang setara) untuk melakukan iterasi pada data untuk daftar Anda. Di lambdaitemContent, panggil item composable yang sesuai untuk data Anda:val data = listOf<MyData>(/* ... */) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { items(data) { ListItem(it) } } }
Kasus penggunaan umum
Dekorasi item
RecyclerView memiliki konsep ItemDecoration, yang dapat Anda gunakan untuk menambahkan gambar khusus untuk item dalam daftar. Misalnya, Anda dapat menambahkan
ItemDecoration untuk menambahkan pemisah di antara item:
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
Compose tidak memiliki konsep dekorasi item yang setara. Sebagai gantinya, Anda
dapat menambahkan dekorasi UI apa pun dalam daftar langsung di komposisi. Misalnya,
untuk menambahkan pemisah ke daftar, Anda dapat menggunakan composable Divider setelah setiap
item:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
Animasi item
ItemAnimator dapat ditetapkan pada RecyclerView untuk menganimasikan tampilan item saat perubahan dilakukan pada adaptor. Secara default, RecyclerView menggunakan
DefaultItemAnimator yang menyediakan animasi dasar pada peristiwa penghapusan, penambahan, dan
pemindahan.
Daftar lambat memiliki konsep serupa melalui pengubah animateItemPlacement.
Lihat Animasi item untuk mempelajari lebih lanjut.
Referensi lainnya
Untuk mengetahui informasi selengkapnya tentang memigrasikan RecyclerView ke Compose, lihat referensi berikut:
- Daftar dan Petak: Dokumentasi tentang cara menerapkan daftar dan petak di Compose.
- Interop Jetpack Compose: Menggunakan Compose di RecyclerView:
Postingan blog untuk menggunakan Compose secara efisien dalam
RecyclerView.
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Daftar dan petak
- Memigrasikan
CoordinatorLayoutke Compose - Pertimbangan lainnya