RecyclerView, büyük veri kümelerini verimli bir şekilde görüntülemeyi kolaylaştıran bir View bileşenidir. Veri kümesindeki her öğe için görünüm oluşturmak yerine, RecyclerViewküçük bir görünüm havuzu tutarak ve bu öğeler arasında gezinirken bunları geri dönüştürerek uygulamanızın performansını artırır.
Compose'da aynı şeyi yapmak için Lazy listeleri kullanabilirsiniz. Bu sayfada, Compose'da Lazy listeleri kullanmak için RecyclerView uygulamanızı nasıl taşıyacağınız 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 açıklama satırı yapın veya kaldırın ve hiyerarşide henüz yoksa bunun yerine birComposeViewekleyin. Bu, ekleyeceğiniz Lazy listesinin kapsayıcısıdır:<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'inizin 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.LayoutManagerOluşturulabilir
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 } }
RecyclerView.Adapteruygulamanızdaki her görünüm türü için karşılık gelen bir composable oluşturun. Her görünüm türü genellikle birViewHolderalt sınıfıyla eşlenir ancak bu 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'inizinonCreateViewHolder()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 buna veri bağlama arasında bir ayrım yoktur. Bu kavramlar birleştirilmiştir.Lazy list'in
contentalanında (sondaki lambda parametresi), listenizdeki verileri yinelemek içinitems()işlevini (veya eşdeğer bir aşırı yüklemeyi) 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 amacıyla kullanabileceğiniz bir ItemDecoration kavramına sahiptir. Örneğin, öğeler arasına ayırıcı eklemek için ItemDecoration ekleyebilirsiniz:
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
Compose'da öğe süslemeleriyle eşdeğer bir kavram yoktur. Bunun yerine, listedeki tüm kullanıcı arayüzü süslemelerini doğrudan oluşturmaya ekleyebilirsiniz. Örneğin, listeye ayırıcı eklemek için her öğeden sonra Divider composable'ını kullanabilirsiniz:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
Öğe animasyonları
Adaptörde değişiklikler yapıldıkça öğelerin görünümüne animasyon eklemek için RecyclerView üzerinde bir ItemAnimator ayarlanabilir. RecyclerView varsayılan olarak 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ı bölümüne bakın.
Ek kaynaklar
RecyclerView öğesini Compose'a taşıma hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atın:
- Listeler ve Izgaralar: Compose'da listelerin ve ızgaraların nasıl uygulanacağına dair dokümanlar.
- Jetpack Compose Birlikte Çalışabilirliği: RecyclerView'da Compose Kullanma:
RecyclerViewiçinde Compose'u verimli bir şekilde kullanma hakkında blog yayını.
Sizin için önerilenler
- Not: JavaScript devre dışı bırakıldığında bağlantı metni gösterilir.
- Listeler ve ızgaralar
CoordinatorLayoutuygulamasını Compose'a taşıma- Dikkat edilmesi gereken diğer noktalar