RecyclerView, büyük veri kümelerini verimli bir şekilde görüntülemeyi kolaylaştıran bir Görünüm bileşenidir. Veri kümesindeki her öğe için görünümler oluşturmak yerine, RecyclerView küçük bir görünüm havuzu tutarak ve bu öğeler arasında gezinirken görünümleri yeniden kullanarak uygulamanızın performansını artırır.
Aynı işlemi Compose'da Lazy lists ile yapabilirsiniz. Bu sayfada, RecyclerView uygulamanızı Compose'da Lazy list'leri kullanacak şekilde nasıl taşıyabileceğiniz açıklanmaktadır.
Taşıma adımları
RecyclerView uygulamanızı Compose'a taşımak için aşağıdaki adımları uygulayın:
Kullanıcı arayüzü hiyerarşinizdeki
RecyclerViewöğesini yorum satırı haline getirin veya kaldırın ve hiyerarşide henüz yoksa yerineComposeViewöğesini ekleyin. Ekleyeceğiniz tembel liste kapsayıcısı:<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>RecyclerView'nızın düzen yöneticisine göre hangi tür Lazy list composable'a ihtiyacınız olduğunu belirleyin (aşağıdaki tabloya bakın). Seçtiğiniz composable, önceki adımda eklediğinizComposeViewöğesinin üst düzey composable'ı olur.LayoutManagerComposable
LinearLayoutManagerLazyColumnveyaLazyRowGridLayoutManagerLazyVerticalGridveyaLazyHorizontalGridStaggeredGridLayoutManagerLazyVerticalStaggeredGridveyaLazyHorizontalStaggeredGrid// recyclerView.layoutManager = LinearLayoutManager(context) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { // We use a LazyColumn since the layout manager of the RecyclerView is a vertical LinearLayoutManager } }
Uygulamanızdaki her görünüm türü için karşılık gelen bir composable oluşturun.
RecyclerView.AdapterHer görünüm türü genellikle birViewHolderalt sınıfıyla eşlenir ancak bu durum her zaman geçerli olmayabilir. Bu composable'lar, listenizdeki farklı öğe türlerinin kullanıcı arayüzü temsili olarak kullanılır:@Composable fun ListItem(data: MyData, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth()) { Text(text = data.name) // … other composables required for displaying `data` } }
RecyclerView.Adapter'nınonCreateViewHolder()veonBindViewHolder()yöntemlerindeki mantık, bu composable'lar ve onlara sağladığınız durumla değiştirilir. Compose'da bir öğe için composable oluşturma ve verileri buna bağlama arasında bir ayrım yoktur. Bu kavramlar birleştirilmiştir.Lazy listesinin
contentyuvasında (sondaki lambda parametresi), listenizin verileri arasında yineleme yapmak içinitems()işlevini (veya eşdeğer bir aşırı yükleme) kullanın.itemContentlambda'sında verileriniz için uygun composable öğeyi çağırın:val data = listOf<MyData>(/* ... */) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { items(data) { ListItem(it) } } }
Yaygın kullanım alanları
Öğe süslemeleri
RecyclerView, listedeki öğeler için özel bir çizim eklemek üzere kullanabileceğiniz ItemDecoration kavramına sahiptir. Örneğin, öğeler arasına ayırıcı eklemek için ItemDecoration simgesini kullanabilirsiniz:
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
Compose'da öğe süslemelerine eşdeğer bir kavram yoktur. Bunun yerine, listedeki kullanıcı arayüzü süslemelerini doğrudan kompozisyona ekleyebilirsiniz. Örneğin, listeye ayırıcı eklemek için her öğeden sonra Divider composable'ı kullanabilirsiniz:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
Öğe animasyonları
Öğelerin görünümünü, bağdaştırıcıda değişiklikler yapıldıkça canlandırmak için RecyclerView üzerinde ItemAnimator ayarlanabilir. Varsayılan olarak RecyclerView, kaldırma, ekleme ve taşıma etkinliklerinde temel animasyonlar sağlayan DefaultItemAnimator kullanır.
Lazy listeler, animateItemPlacement değiştiricisi aracılığıyla benzer bir konsepte sahiptir.
Daha fazla bilgi için Öğe animasyonları başlıklı makaleyi inceleyin.
Ek kaynaklar
RecyclerView uygulamasını Compose'a taşıma hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- Listeler ve Izgaralar: Listelerin ve ızgaraların Compose'da nasıl uygulanacağına dair dokümanlar.
- Jetpack Compose Interop: Using Compose in a RecyclerView:
Compose'u
RecyclerViewiçinde verimli bir şekilde kullanmayla ilgili blog yayını.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir.
- Listeler ve ızgaralar
CoordinatorLayout'i Oluştur'a taşıma- Dikkat edilmesi gereken diğer noktalar