سفارشیسازی فهرست پویا بخشی از 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
مراجعه کنید.
مثال زیر نشان میدهد که چگونه این قطعات را کنار هم قرار دهید:
کاتلین
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() بررسی کنید.
برای حفظ وضعیت انتخاب در رویدادهای چرخه حیات فعالیت، برنامهتان
باید روشهای
onSaveInstanceState()
و
onRestoreInstanceState()
ردیاب انتخاب را بهترتیب از روشهای
onSaveInstanceState()
و
onRestoreInstanceState()
فعالیت فراخوانی کند. برنامه شما همچنین باید یک شناسه انتخاب یکتا به سازنده
SelectionTracker.Builder ارائه دهد. این شناسه لازم است زیرا
یک فعالیت یا قطعه ممکن است بیشاز یک فهرست متمایز و قابلانتخاب داشته باشد،
که همه آنها باید در وضعیت ذخیرهشده خود باقی بمانند.
منابع بیشتر
برای اطلاعات بیشتر، به مراجع زیر مراجعه کنید.
- برنامه نمایشی
Sunflower که از
RecyclerViewاستفاده میکند. - استفاده از RecyclerView برای نمایش فهرست پیمایشپذیر codelab.
- Android Kotlin Fundamentals: RecyclerView fundamentals codelab.