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

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

مصادر إضافية

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