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

تجربة طريقة Compose
‫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. هذا المعرّف مطلوب لأنّ النشاط أو الجزء قد يحتوي على أكثر من قائمة واحدة مميزة وقابلة للاختيار، ويجب الاحتفاظ بها جميعًا في حالتها المحفوظة.

مراجع إضافية

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