تخصيص قائمة ديناميكية جزء من Android Jetpack.
يمكنك تخصيص
عناصر RecyclerView
لتلبية احتياجاتك الخاصة. وتوفر الفئات العادية الموضّحة في قسم
إنشاء القوائم الديناميكية باستخدام RecyclerView جميع الوظائف التي يحتاجها معظم المطوِّرين. في كثير من الحالات، تحتاج فقط إلى تصميم طريقة العرض لكل صاحب ملف شخصي وكتابة الرمز لتحديث طرق العرض هذه بالبيانات المناسبة. ومع ذلك، إذا كانت لتطبيقك متطلبات محدّدة، يمكنك تعديل السلوك القياسي بعدة طرق.
يصف هذا المستند بعض التخصيصات المحتملة.
تعديل التنسيق
يستخدم RecyclerView
مدير تنسيق لتحديد موضع العناصر الفردية على الشاشة وتحديد الوقت الذي يُعاد فيه استخدام طرق عرض العناصر التي لم تعُد مرئية للمستخدم. لإعادة استخدام طريقة عرض أو إعادة تدويرها، قد يطلب مدير التنسيق من المهايئ استبدال محتوى طريقة العرض بعنصر مختلف من مجموعة البيانات. تؤدي إعادة تدوير طرق العرض بهذه الطريقة إلى تحسين الأداء من خلال تجنُّب إنشاء طرق عرض غير ضرورية أو إجراء عمليات بحث findViewById()
مكلفة. تتضمن مكتبة دعم Android ثلاثة مديري تصميم عاديين،
يوفّر كل منها العديد من خيارات التخصيص:
LinearLayoutManager
: لترتيب العناصر في قائمة أحادية البُعد. ويؤدي استخدامRecyclerView
معLinearLayoutManager
إلى توفير وظائف مثل تنسيقListView
.GridLayoutManager
: لترتيب العناصر في شبكة ثنائية الأبعاد، مثل المربعات على رقعة الشطرنج. ويؤدي استخدامRecyclerView
معGridLayoutManager
إلى توفير وظائف مثل تنسيقGridView
.StaggeredGridLayoutManager
: لترتيب العناصر في شبكة ثنائية الأبعاد، مع إزاحة كل عمود قليلاً عن العمود السابق، مثل النجوم على العلم الأمريكي.
إذا لم يتناسب مديرو التنسيق هؤلاء مع احتياجاتك، يمكنك إنشاء جدولك الخاص من خلال تمديد
فئة RecyclerView.LayoutManager
التجريدية.
إضافة صور متحركة للعنصر
عندما يتغيّر أي عنصر، يستخدم RecyclerView
أداة متحركة لتغيير مظهره. أداة الصور المتحركة هذه هي عبارة عن كائن يوسّع فئة
RecyclerView.ItemAnimator
التجريدية. وبشكل تلقائي، تستخدم علامة RecyclerView
DefaultItemAnimator
لتقديم الحركة. إذا أردت توفير صور متحركة مخصّصة، يمكنك
تحديد كائنات الرسوم المتحركة الخاصة بك من خلال تمديد
RecyclerView.ItemAnimator
.
تفعيل اختيار عناصر القائمة
تتيح مكتبة
recyclerview-selection
للمستخدمين اختيار عناصر في قائمة RecyclerView
باستخدام
اللمس أو الماوس. يتيح لك هذا الاحتفاظ بالتحكم في العرض التقديمي
المرئي لعنصر محدد. يمكنك أيضًا الاحتفاظ بالتحكم في السياسات التي تتحكم في سلوك
الاختيار، مثل العناصر المؤهلة للاختيار وعدد العناصر التي يمكن
اختيارها.
لإتاحة تحديد المثيل RecyclerView
، يمكنك اتّباع الخطوات التالية:
- حدِّد نوع مفتاح الاختيار الذي تريد استخدامه، ثم أنشِئ
ItemKeyProvider
.هناك ثلاثة أنواع رئيسية يمكنك استخدامها لتحديد العناصر المحددة:
Parcelable
وفئاته الفرعية، مثلUri
String
Long
للحصول على معلومات تفصيلية حول أنواع مفاتيح الاختيار، يُرجى الاطّلاع على
SelectionTracker.Builder
. - تنفيذ
ItemDetailsLookup
. - عدِّل كائنات
View
للعنصر فيRecyclerView
لمعرفة ما إذا كان المستخدم يختارها أو يلغي اختيارها.لا توفّر مكتبة الاختيارات ديكورات مرئية تلقائية للعناصر المحدّدة. يقدم هذا الحقل عند تنفيذ
onBindViewHolder()
. ننصح باتّباع النهج التالي:- في
onBindViewHolder()
، يمكنك استدعاءsetActivated()
، وليسsetSelected()
، على الكائنView
معtrue
أوfalse
، بناءً على ما إذا تم اختيار العنصر. - عدِّل نمط الملف الشخصي للإشارة إلى الحالة مفعَّلة. ننصح باستخدام مورد لقائمة حالة الألوان لضبط النمط.
- في
- استخدِم السمة
ActionMode
لتزويد المستخدم بالأدوات اللازمة لتنفيذ إجراء بشأن عملية الاختيار. - تنفيذ أي إجراءات ثانوية مفسَّرة
- يمكنك تجميع كل ما تريد باستخدام "
SelectionTracker.Builder
". - تضمين اختيار في دورة حياة النشاط.
يتيح ItemDetailsLookup
لمكتبة الاختيارات الوصول إلى معلومات حول عناصر RecyclerView
في MotionEvent
.
وهو مصنع فعلي لمثيلات
ItemDetails
التي يتم الاحتفاظ بنسخة احتياطية منها أو استخراجها من
مثيل RecyclerView.ViewHolder
.
يمكنك تسجيل
SelectionTracker.SelectionObserver
ليتم إعلامك عند تغيُّر أحد الاختيارات. عند إنشاء عملية اختيار للمرة الأولى،
ابدأ ActionMode
لعرض هذا الخيار على المستخدم
وتوفير إجراءات خاصة بالاختيار. على سبيل المثال، يمكنك إضافة زر حذف إلى شريط "ActionMode
" وربط سهم الرجوع على الشريط لمحو
الجزء المحدّد. عندما يصبح التحديد فارغًا، في حال محو المستخدم
التحديد في المرة الأخيرة، يتم إنهاء وضع الإجراء.
في نهاية مسار معالجة الأحداث، قد تستنتج المكتبة أنّ المستخدم يحاول تفعيل عنصر من خلال النقر عليه أو يحاول سحب عنصر أو مجموعة من العناصر التي تم اختيارها. وتفاعَل مع هذه التفسيرات من خلال تسجيل المستمع المناسب. لمزيد من
المعلومات، يُرجى الاطّلاع على
SelectionTracker.Builder
.
يوضح المثال التالي كيفية وضع هذه القطع معًا:
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
لإنشاء مثيل SelectionTracker
، يجب أن يوفّر تطبيقك RecyclerView.Adapter
نفسه الذي تستخدمه لإعداد RecyclerView
إلى SelectionTracker.Builder
. لهذا السبب، بعد إنشاء المثيل SelectionTracker
، أدخِله في RecyclerView.Adapter
. وبخلاف ذلك، لا يمكنك التحقّق من الحالة التي تم اختيارها لعنصر من خلال طريقة onBindViewHolder()
.
للحفاظ على حالة الاختيار في جميع أحداث مراحل النشاط، يجب أن يستدعي تطبيقك الطريقتَين onSaveInstanceState()
وonRestoreInstanceState()
الخاصتَين بأداة تتبُّع الاختيار من الطريقتين onSaveInstanceState()
وonRestoreInstanceState()
الخاصتَين بالنشاط على التوالي. ويجب أن يوفّر تطبيقك أيضًا معرّف اختيار فريد في
الدالة الإنشائية SelectionTracker.Builder
. يجب إدخال رقم التعريف هذا لأنّ النشاط أو الجزء قد يحتوي على أكثر من قائمة واحدة مميّزة وقابلة للاختيار،
ويجب الاحتفاظ بجميع هذه القائمة بحالتها المحفوظة.
مصادر إضافية
راجِع المراجع التالية للحصول على معلومات إضافية.
- التطبيق التجريبي لزهرة دوار الشمس، الذي يستخدم
RecyclerView
. - استخدِم RecyclerView لعرض الدرس التطبيقي حول الترميز في قائمة قابلة للتمرير.
- درس تطبيقي حول الترميز في Android Kotlin Fundamentals: أساسيات RecyclerView.