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 yapmak için Oluşturma'da Lazy lists'i kullanabilirsiniz. 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.LayoutManager
Composable
LinearLayoutManager
LazyColumn
veyaLazyRow
GridLayoutManager
LazyVerticalGrid
veyaLazyHorizontalGrid
StaggeredGridLayoutManager
LazyVerticalStaggeredGrid
veyaLazyHorizontalStaggeredGrid
// 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.Adapter
Her görünüm türü genellikle birViewHolder
alt 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
content
yuvası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.itemContent
lambda'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üslemeleriyle 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'ını 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
RecyclerView
iç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- Diğer dikkat edilmesi gereken noktalar