سفارشی‌سازی فهرست پویا   بخشی از 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. مثال زیر نشان می‌دهد که چگونه این قطعات را کنار هم قرار دهید:

    کاتلین

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    جاوا

        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 ارائه دهد. این شناسه لازم است زیرا یک فعالیت یا قطعه ممکن است بیش‌از یک فهرست متمایز و قابل‌انتخاب داشته باشد، که همه آن‌ها باید در وضعیت ذخیره‌شده خود باقی بمانند.

منابع بیشتر

برای اطلاعات بیشتر، به مراجع زیر مراجعه کنید.