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