RecyclerView হলো একটি ভিউ কম্পোনেন্ট যা বিপুল পরিমাণ ডেটা সেটকে দক্ষতার সাথে প্রদর্শন করা সহজ করে তোলে। ডেটা সেটের প্রতিটি আইটেমের জন্য আলাদা ভিউ তৈরি করার পরিবর্তে, RecyclerView অল্প সংখ্যক ভিউয়ের একটি পুল তৈরি করে রাখে এবং আপনি যখন আইটেমগুলো স্ক্রল করেন, তখন সেগুলোকে রিসাইকেল করে আপনার অ্যাপের পারফরম্যান্স উন্নত করে।
Compose-এ, আপনি একই কাজ করার জন্য Lazy lists ব্যবহার করতে পারেন। এই পৃষ্ঠায় বর্ণনা করা হয়েছে কিভাবে আপনি আপনার RecyclerView ইমপ্লিমেন্টেশনকে Compose-এ Lazy lists ব্যবহার করার জন্য মাইগ্রেট করতে পারেন।
অভিবাসনের পদক্ষেপ
আপনার RecyclerView ইমপ্লিমেন্টেশনকে Compose-এ মাইগ্রেট করতে, এই ধাপগুলো অনুসরণ করুন:
আপনার UI হায়ারার্কি থেকে
RecyclerViewকমেন্ট আউট করুন বা সরিয়ে দিন এবং যদি হায়ারার্কিতে আগে থেকে কোনো ComposeView না থাকে, তবে সেটির পরিবর্তে একটিComposeViewযোগ করুন। এটি হলো সেই লেজি লিস্টের কন্টেইনার যা আপনি যোগ করবেন:<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- <androidx.recyclerview.widget.RecyclerView--> <!-- android:id="@+id/recycler_view"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="match_parent />"--> <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>আপনার
RecyclerViewএর লেআউট ম্যানেজারের উপর ভিত্তি করে আপনার কোন ধরনের লেজি লিস্ট কম্পোজেবল প্রয়োজন তা নির্ধারণ করুন (নিচের সারণিটি দেখুন)। আপনি যে কম্পোজেবলটি নির্বাচন করবেন, সেটি হবে পূর্ববর্তী ধাপে আপনার যোগ করাComposeViewএর শীর্ষ-স্তরের কম্পোজেবল।LayoutManagerরচনাযোগ্য
LinearLayoutManagerLazyColumnবাLazyRowGridLayoutManagerLazyVerticalGridবাLazyHorizontalGridStaggeredGridLayoutManagerLazyVerticalStaggeredGridঅথবাLazyHorizontalStaggeredGrid// recyclerView.layoutManager = LinearLayoutManager(context) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { // We use a LazyColumn since the layout manager of the RecyclerView is a vertical LinearLayoutManager } }
আপনার
RecyclerView.Adapterইমপ্লিমেন্টেশনে প্রতিটি ভিউ টাইপের জন্য একটি সংশ্লিষ্ট কম্পোজেবল তৈরি করুন। প্রতিটি ভিউ টাইপ সাধারণত একটিViewHolderসাবক্লাসের সাথে ম্যাপ করা থাকে, যদিও সবসময় এমনটা নাও হতে পারে। এই কম্পোজেবলগুলো আপনার তালিকার বিভিন্ন ধরনের উপাদানের UI উপস্থাপনা হিসেবে ব্যবহৃত হবে:@Composable fun ListItem(data: MyData, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth()) { Text(text = data.name) // … other composables required for displaying `data` } }
আপনার
RecyclerView.AdapterএরonCreateViewHolder()এবংonBindViewHolder()মেথডগুলোর লজিক এই কম্পোজেবলগুলো এবং সেগুলোর জন্য আপনার সরবরাহ করা স্টেট দ্বারা প্রতিস্থাপিত হবে। কম্পোজে, কোনো আইটেমের জন্য কম্পোজেবল তৈরি করা এবং তাতে ডেটা বাইন্ড করার মধ্যে কোনো বিভাজন নেই—এই ধারণাগুলো একীভূত।লেজি লিস্টের
contentস্লটের (শেষের ল্যাম্বডা প্যারামিটার) মধ্যে, আপনার লিস্টের ডেটার মধ্য দিয়ে পুনরাবৃত্তি করার জন্যitems()ফাংশন (বা এর সমতুল্য কোনো ওভারলোড) ব্যবহার করুন।itemContentল্যাম্বডাতে, আপনার ডেটার জন্য উপযুক্ত কম্পোজেবল আইটেমটি কল করুন:val data = listOf<MyData>(/* ... */) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { items(data) { ListItem(it) } } }
সাধারণ ব্যবহারের ক্ষেত্রগুলি
আইটেম সজ্জা
RecyclerView ItemDecoration নামে একটি ধারণা রয়েছে, যা ব্যবহার করে আপনি তালিকার আইটেমগুলোর জন্য একটি বিশেষ নকশা যোগ করতে পারেন। উদাহরণস্বরূপ, আইটেমগুলোর মধ্যে বিভাজক যোগ করার জন্য আপনি একটি ItemDecoration যোগ করতে পারেন:
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
কম্পোজে আইটেম ডেকোরেশনের মতো কোনো সমতুল্য ধারণা নেই। এর পরিবর্তে, আপনি সরাসরি কম্পোজিশনের মধ্যেই তালিকায় যেকোনো UI ডেকোরেশন যোগ করতে পারেন। উদাহরণস্বরূপ, তালিকায় ডিভাইডার যোগ করতে, আপনি প্রতিটি আইটেমের পরে Divider কম্পোজেবলটি ব্যবহার করতে পারেন:
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
আইটেম অ্যানিমেশন
অ্যাডাপ্টারে পরিবর্তন হওয়ার সাথে সাথে আইটেমগুলোর উপস্থিতি অ্যানিমেট করার জন্য একটি RecyclerView তে ItemAnimator সেট করা যেতে পারে। ডিফল্টরূপে, RecyclerView DefaultItemAnimator ব্যবহার করে, যা remove, add, এবং move ইভেন্টগুলোতে মৌলিক অ্যানিমেশন প্রদান করে।
animateItemPlacement মডিফায়ারের মাধ্যমে লেজি লিস্টেও একই ধরনের ধারণা পাওয়া যায়। আরও জানতে আইটেম অ্যানিমেশন দেখুন।
অতিরিক্ত সম্পদ
RecyclerView Compose-এ স্থানান্তর করার বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত রিসোর্সগুলি দেখুন:
- তালিকা ও গ্রিড : কম্পোজে কীভাবে তালিকা ও গ্রিড প্রয়োগ করতে হয় তার ডকুমেন্টেশন।
- জেটপ্যাক কম্পোজ ইন্টারঅপ: রিসাইক্লারভিউতে কম্পোজের ব্যবহার :
RecyclerViewমধ্যে দক্ষতার সাথে কম্পোজ ব্যবহারের উপর ব্লগ পোস্ট।
আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলেও লিঙ্কের লেখা প্রদর্শিত হয়।
- তালিকা এবং গ্রিড
-
CoordinatorLayoutকে Compose-এ স্থানান্তর করুন - অন্যান্য বিবেচ্য বিষয়