سفارشی کردن لیست پویا بخشی از Android Jetpack .
شما می توانید اشیاء RecyclerView
برای رفع نیازهای خاص خود سفارشی کنید. کلاس های استانداردی که در Create dynamic lists with RecyclerView توضیح داده شده است، تمام قابلیت هایی را که اکثر توسعه دهندگان به آن نیاز دارند را ارائه می دهند. در بسیاری از موارد، شما فقط نیاز دارید که برای هر یک از دارندگان view، نما را طراحی کنید و کدی را بنویسید تا آن نماها با داده های مناسب به روز شوند. با این حال، اگر برنامه شما الزامات خاصی دارد، میتوانید رفتار استاندارد را به روشهای مختلفی تغییر دهید. این سند برخی از سفارشی سازی های ممکن را شرح می دهد.
طرح بندی را اصلاح کنید
RecyclerView
از یک مدیر طرحبندی برای قرار دادن موارد منفرد روی صفحه و تعیین زمان استفاده مجدد از نماهای موردی که دیگر برای کاربر قابل مشاهده نیستند استفاده میکند. برای استفاده مجدد - یا بازیافت - یک نما، یک مدیر طرحبندی ممکن است از آداپتور بخواهد که محتوای نما را با عنصری متفاوت از مجموعه داده جایگزین کند. بازیافت نماها از این طریق با اجتناب از ایجاد نماهای غیر ضروری یا انجام جستجوهای گرانقیمت findViewById()
عملکرد را بهبود می بخشد. کتابخانه پشتیبانی اندروید شامل سه مدیر طرحبندی استاندارد است که هر کدام گزینههای سفارشیسازی زیادی را ارائه میدهند:
-
LinearLayoutManager
: موارد را در یک لیست تک بعدی مرتب می کند. استفاده ازRecyclerView
باLinearLayoutManager
عملکردی مانند چیدمانListView
را فراهم می کند. -
GridLayoutManager
: موارد را در یک شبکه دو بعدی، مانند مربعهای روی صفحه شطرنجی، مرتب میکند. استفاده ازRecyclerView
باGridLayoutManager
عملکردی مانند طرح بندیGridView
را فراهم می کند. -
StaggeredGridLayoutManager
: موارد را در یک شبکه دوبعدی مرتب می کند که هر ستون کمی از ستون قبلی فاصله دارد، مانند ستاره های پرچم آمریکا.
اگر این مدیران طرحبندی با نیازهای شما مطابقت ندارند، میتوانید با گسترش کلاس انتزاعی RecyclerView.LayoutManager
کلاس خود را ایجاد کنید.
انیمیشن مورد را اضافه کنید
هر زمان که یک آیتم تغییر می کند، RecyclerView
از یک انیماتور برای تغییر ظاهر آن استفاده می کند. این انیماتور یک شی است که کلاس RecyclerView.ItemAnimator
انتزاعی را گسترش می دهد. به طور پیش فرض، RecyclerView
از DefaultItemAnimator
برای ارائه انیمیشن استفاده می کند. اگر میخواهید انیمیشنهای سفارشی ارائه کنید، میتوانید با گسترش RecyclerView.ItemAnimator
شی انیماتور خود را تعریف کنید.
انتخاب مورد فهرست را فعال کنید
کتابخانه recyclerview-selection
به کاربران این امکان را می دهد که با استفاده از ورودی لمسی یا ماوس، موارد موجود در لیست RecyclerView
را انتخاب کنند. این به شما امکان می دهد تا کنترل بصری یک مورد انتخاب شده را حفظ کنید. همچنین میتوانید روی خطمشیهایی که رفتار انتخاب را کنترل میکنند، کنترل داشته باشید، مانند مواردی که برای انتخاب واجد شرایط هستند و چند مورد میتوانند انتخاب شوند.
برای افزودن پشتیبانی انتخاب به یک نمونه RecyclerView
، این مراحل را دنبال کنید:
- نوع کلید انتخابی مورد استفاده را تعیین کنید، سپس یک
ItemKeyProvider
بسازید.سه نوع کلیدی وجود دارد که می توانید برای شناسایی موارد انتخاب شده استفاده کنید:
-
Parcelable
و زیر کلاس های آن، مانندUri
-
String
-
Long
برای اطلاعات دقیق در مورد انواع کلید انتخاب، به
SelectionTracker.Builder
مراجعه کنید. -
- Implement
ItemDetailsLookup
. -
View
RecyclerView
بهروزرسانی کنید.کتابخانه انتخاب یک دکوراسیون بصری پیش فرض برای موارد انتخاب شده ارائه نمی دهد. این را هنگام پیاده سازی
onBindViewHolder()
ارائه دهید. ما روش زیر را توصیه می کنیم:- در
onBindViewHolder()
، بسته به انتخاب آیتم، روی شیView
باtrue
یاfalse
،setActivated()
— notsetSelected()
را فراخوانی کنید. - برای نمایش وضعیت فعال، استایل نمای را به روز کنید. توصیه می کنیم از یک منبع فهرست حالت رنگ برای پیکربندی استایل استفاده کنید.
- در
- از
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 برای نمایش یک کد لیست قابل پیمایش استفاده کنید .
- Android Kotlin Fundamentals: RecyclerView Fundamentals Codelab.