تخصيص قائمة ديناميكية جزء من Android Jetpack.

تجربة طريقة الإنشاء
Jetpack Compose هي مجموعة أدوات واجهة المستخدم المقترَحة لنظام التشغيل Android. تعرَّف على كيفية استخدام التنسيقات في Compose.

يمكنك تخصيص 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، اتّبِع الخطوات التالية:

  1. حدِّد نوع مفتاح الاختيار الذي تريد استخدامه، ثم أنشِئ ItemKeyProvider.

    هناك ثلاثة أنواع رئيسية يمكنك استخدامها لتحديد العناصر المحدّدة:

    للحصول على معلومات تفصيلية حول أنواع مفاتيح الاختيار، يُرجى الاطّلاع على SelectionTracker.Builder.

  2. تنفيذ ItemDetailsLookup.
  3. تتيح السمة ItemDetailsLookup لمكتبة التحديدات إمكانية الوصول إلى معلومات حول RecyclerView عنصر تم منحها قيمة MotionEvent. إنّه مصمّم بشكل فعال لمثيلات ItemDetails التي يتم الاحتفاظ بنسخة احتياطية منها من خلال مثيل RecyclerView.ViewHolder أو استخراجه منه.

  4. ويمكنك تعديل كائنات View في العنصر RecyclerView لتوضيح ما إذا كان المستخدم يختارها أو يلغي اختيارها.

    لا توفّر مكتبة العناصر المحددة زخرفة مرئية تلقائية للعناصر المحددة. عليك تقديم هذه السمة عند تنفيذ onBindViewHolder(). وننصح باتّباع النهج التالي:

    • في onBindViewHolder()، يمكنك استدعاء setActivated()، وليس setSelected()، على الكائن View باستخدام true أو false، وذلك بناءً على ما إذا تم اختيار العنصر أم لا.
    • يمكنك تعديل تصميم العرض لتمثيل الحالة المفعَّلة. ننصحك باستخدام مورد قائمة حالة اللون لضبط التصميم.
  5. استخدِم ActionMode لتزويد المستخدم بالأدوات اللازمة لتنفيذ إجراء بشأن الاختيار.
  6. سجِّل SelectionTracker.SelectionObserver ليتم إعلامك عند تغيير أحد الخيارات. عند إنشاء مجموعة مختارة لأول مرة، ابدأ في ActionMode لتقديم هذا الخيار للمستخدم وتوفير إجراءات محددة. على سبيل المثال، يمكنك إضافة زر حذف إلى شريط ActionMode وربط سهم الرجوع على الشريط بإزالة النص المحدَّد. عندما يصبح الاختيار فارغًا، إذا أمحو المستخدم الاختيار في آخر مرة، يمكنك إنهاء وضع الإجراء.

  7. تنفيذ أي إجراءات ثانوية مفسَّرة
  8. في نهاية مسار معالجة الفعاليات، قد ترصد المكتبة أنّ المستخدم يحاول تفعيل عنصر من خلال النقر عليه أو يحاول سحب عنصر أو مجموعة من العناصر المحددة. ويجب التفاعل مع هذه التفسيرات من خلال تسجيل المستمع المناسب. لمزيد من المعلومات، يُرجى الاطّلاع على "SelectionTracker.Builder".

  9. اجمع كل العناصر باستخدام "SelectionTracker.Builder".
  10. يوضّح المثال التالي كيفية تجميع هذه القطع معًا:

    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().

  11. أضِف مجموعة محددة في أحداث مراحل النشاط.
  12. للحفاظ على حالة الاختيار في جميع مراحل نشاط النشاط، يجب أن يستدعي تطبيقك طريقتَي onSaveInstanceState() وonRestoreInstanceState() من أداة تتبُّع الاختيار من خلال الطريقتَين onSaveInstanceState() وonRestoreInstanceState() في النشاط، على التوالي. يجب أن يوفّر تطبيقك أيضًا معرّف اختيار فريدًا إلى الدالة الإنشائية SelectionTracker.Builder. ويجب توفير رقم التعريف هذا لأنّه قد يتضمّن النشاط أو الجزء أكثر من قائمة مختلفة يمكن اختيارها، ويجب الاحتفاظ بجميع هذه القوائم في حالتها المحفوظة.

مراجع إضافية

يُرجى الاطّلاع على المراجع التالية للحصول على معلومات إضافية.