تخصيص قائمة ديناميكية جزء من Android Jetpack.
يمكنك تخصيص
RecyclerView
العناصر لتلبية احتياجاتك المحدّدة. توفّر الفئات العادية الموضّحة في مقالة
إنشاء قوائم ديناميكية باستخدام RecyclerView جميع الوظائف التي يحتاجها معظم المطوّرين. في
العديد من الحالات، ما عليك سوى تصميم طريقة العرض لكلّ حامل عرض وكتابة
الرمز لتعديل طرق العرض هذه باستخدام البيانات المناسبة. ومع ذلك، إذا كان تطبيقك يحتوي على متطلبات
محدّدة، يمكنك تعديل السلوك العادي بعدة طرق.
يوضّح هذا المستند بعض التخصيصات المحتملة.
تعديل التنسيق
يستخدم RecyclerView
مدير تنسيق لتحديد موضع العناصر الفردية على الشاشة وتحديد الوقت الذي يُعاد فيه استخدام طرق عرض العناصر التي لم تعُد مرئية للمستخدم. لإعادة استخدام عرض أو إعادة تدويره، قد يطلب مدير ملف التنسيق من المحوِّل استبدال محتوى العرض بعنصر مختلف من مجموعة البيانات. تؤدي إعادة تدوير طرق العرض بهذه الطريقة إلى تحسين الأداء
من خلال تجنُّب إنشاء طرق عرض غير ضرورية أو إجراء
عمليات بحث مكلفة
findViewById()
. تتضمّن مكتبة Android Support Library ثلاثة مدراء تنسيقات عاديين،
يقدّم كلٌّ منها العديد من خيارات التخصيص:
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
. هذا المعرّف مطلوب لأنّه
قد يتضمّن النشاط أو المقتطف أكثر من قائمة واحدة مميزة وقابلة للاختيار،
ويجب الاحتفاظ بجميعها في حالتها المحفوظة.
مصادر إضافية
راجِع المراجع التالية للحصول على معلومات إضافية.
- تطبيق Sunflower
التجريبي الذي يستخدم
RecyclerView
- استخدام RecyclerView لعرض قائمة قابلة للتنقّل
- Android دورة الترميز Kotlin Fundamentals: أساسيات RecyclerView