RecyclerView یک عنصر «نما» است که نمایش کارآمد مجموعههای بزرگ داده را آسان میکند. بهجای ایجاد نما برای هر عنصر در مجموعه داده،
RecyclerView با حفظ مجموعه کوچکی از نماها و بازیافت آنها هنگام پیمایش در میان عناصر، عملکرد برنامهتان را بهبود میبخشد.
در «نوشتن»، میتوانید از فهرستهای تنبل برای انجام همان کار استفاده کنید. این صفحه
نحوه انتقال پیادهسازی RecyclerView برای استفاده از فهرستهای «تنبل»
در Compose را شرح میدهد.
مراحل انتقال
برای انتقال پیادهسازی RecyclerView به Compose، این مراحل را دنبال کنید:
RecyclerViewرا از سلسلهمراتب واسط کاربرتان نظرگذاری یا بردارید و اگر هنوز در سلسلهمراتب وجود ندارد،ComposeViewرا برای جایگزینی آن اضافه کنید. این ظرفی برای «فهرست تنبل» است که اضافه خواهید کرد:<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، تعیین کنید به کدام نوع عنصر ترکیبی «فهرست تنبل» نیاز دارید (جدول زیر را ببینید). ترکیبپذیری که انتخاب میکنید ترکیبپذیری سطح بالایComposeViewخواهد بود که در مرحله قبلی اضافه کردید.LayoutManagerترکیبپذیر
LinearLayoutManagerLazyColumnیاLazyRowGridLayoutManagerLazyVerticalGridیاLazyHorizontalGridStaggeredGridLayoutManagerLazyVerticalStaggeredGridیاLazyHorizontalStaggeredGrid// 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.Adapterخود، یک عنصر ترکیبی متناظر ایجاد کنید. هر نوع نمای معمولاً به یک زیرکلاسViewHolderنگاشت میشود، اگرچه همیشه اینگونه نیست. از این عناصر ترکیبی بهعنوان نمایشگر میانای کاربری برای انواع مختلف عناصر در فهرستتان استفاده خواهد شد:@Composable fun ListItem(data: MyData, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth()) { Text(text = data.name) // … other composables required for displaying `data` } }
منطق موجود در روشهای
onCreateViewHolder()وonBindViewHolder()درRecyclerView.Adapterبا این عناصر ترکیبی و وضعیتهایی که به آنها ارائه میدهید جایگزین خواهد شد. در «نوشتن»، بین ایجاد یک عنصر ترکیبی برای یک مورد و پیوند دادن دادهها به آن تفاوتی وجود ندارد—این مفاهیم با هم ترکیب میشوند.در جایگاه
content«فهرست تنبل» (پارامتر لامبدای انتهایی)، از تابعitems()(یا سربار معادل) برای پیمایش دادههای فهرست استفاده کنید. در لامبدایitemContent، عنصر ترکیبی مناسب را برای دادههایتان فراخوانی کنید:val data = listOf<MyData>(/* ... */) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { items(data) { ListItem(it) } } }
موارد استفاده رایج
تزئینات مورد
RecyclerView مفهوم ItemDecoration را دارد که میتوانید از آن برای افزودن
طرح ویژه برای موارد موجود در فهرست استفاده کنید. برای مثال، میتوانید
ItemDecoration را اضافه کنید تا بین موارد جداکننده اضافه شود:
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
«نوشتن» مفهوم معادل برای تزئینات مورد ندارد. درعوض، میتوانید
هرگونه تزئینات میانای کاربری را مستقیماً در فهرست ترکیب اضافه کنید. برای مثال،
برای افزودن جداکنندهها به فهرست، میتوانید از عنصر ترکیبی Divider پساز هر
مورد استفاده کنید:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
پویانماییهای مورد
میتوان ItemAnimator را روی RecyclerView تنظیم کرد تا ظاهر
عناصر را با تغییرات ایجادشده در آداپتور پویانمایی کند. بهطور پیشفرض، RecyclerView از
DefaultItemAnimator استفاده میکند که پویانماییهای پایه را برای برداشتن، افزودن، و
انتقال رویدادها ارائه میدهد.
فهرستهای تنبل ازطریق اصلاحگر animateItemPlacement مفهوم مشابهی دارند.
برای کسب اطلاعات بیشتر، پویانماییهای مورد را ببینید.
منابع بیشتر
برای اطلاعات بیشتر درباره انتقال RecyclerView به Compose، منابع زیر را ببینید:
- فهرستها و جدولها: مستندات مربوط به نحوه پیادهسازی فهرستها و جدولها در Compose.
- قابلیت تعامل Jetpack Compose: استفاده از Compose در RecyclerView:
پست وبلاگ برای استفاده کارآمد از Compose در
RecyclerView.
توصیهشده برای شما
- توجه: نوشتار پیوند وقتی جاوا اسکریپت خاموش است نمایش داده میشود
- فهرستها و شبکهها
- انتقال
CoordinatorLayoutبه «نگارش» - ملاحظات دیگر