RecyclerView
هي أحد مكونات View التي تسهّل عرض مجموعات كبيرة من البيانات بكفاءة. بدلاً من إنشاء طرق عرض لكل عنصر في مجموعة البيانات،
تعمل RecyclerView
على تحسين أداء تطبيقك من خلال الاحتفاظ بمجموعة صغيرة من
طرق العرض وإعادة استخدامها أثناء التنقّل بين العناصر.
في Compose، يمكنك استخدام القوائم الكسولة لتحقيق الغرض نفسه. توضّح هذه الصفحة كيفية نقل عملية تنفيذ 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>
حدِّد نوع Lazy list composable الذي تحتاجه استنادًا إلى أداة إدارة التنسيق في
RecyclerView
(راجِع الجدول أدناه). سيكون العنصر القابل للإنشاء الذي تختاره هو العنصر القابل للإنشاء ذو المستوى الأعلى فيComposeView
الذي أضفته في الخطوة السابقة.LayoutManager
قابلة للتركيب
LinearLayoutManager
LazyColumn
أو LazyRow
GridLayoutManager
LazyVerticalGrid
أو LazyHorizontalGrid
StaggeredGridLayoutManager
LazyVerticalStaggeredGrid
أو 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
بهذه العناصر القابلة للإنشاء والحالة التي توفّرها لها. في Compose، لا يوجد فصل بين إنشاء عنصر قابل للإنشاء لغرض ما وربط البيانات به، بل يتم دمج هذين المفهومين.ضِمن فتحة
content
في القائمة الكسولة (المَعلمة lambda اللاحقة)، استخدِم الدالةitems()
(أو حمولة زائدة مكافئة) للتكرار خلال بيانات قائمتك. في دالةitemContent
lambda، استدعِ العنصر القابل للإنشاء المناسب لبياناتك: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)
لا يتضمّن Compose مفهومًا مكافئًا لتزيين العناصر. بدلاً من ذلك، يمكنك إضافة أي عناصر تزيين لواجهة المستخدم في القائمة مباشرةً في التركيبة. على سبيل المثال،
لإضافة فواصل إلى القائمة، يمكنك استخدام العنصر القابل للإنشاء 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 وRecyclerView: استخدام Compose في RecyclerView:
مشاركة مدوّنة حول كيفية استخدام Compose بكفاءة في
RecyclerView
.
أفلام مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون JavaScript غير مفعّلة
- القوائم والشبكات
- نقل البيانات من
CoordinatorLayout
إلى Compose - اعتبارات أخرى