تخصيص قائمة ديناميكية جزء من 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
constructor. هذا المعرّف مطلوب للأسباب التالية:
نشاط أو جزء قد يحتوي على أكثر من قائمة واحدة مميزة يمكن تحديدها،
والتي يلزم استمرارها جميعًا بحالتها المحفوظة.
مصادر إضافية
يمكنك الاطّلاع على المراجع التالية للحصول على معلومات إضافية.
- دوار الشمس
التطبيق التجريبي الذي يستخدم
RecyclerView
. - الاستخدام RecyclerView لعرض الدرس التطبيقي حول الترميز في قائمة قابلة للتمرير.
- أجهزة Android درس تطبيقي حول الترميز في Kotlin Fundamentals: أساسيات RecyclerView.