RecyclerView অলস তালিকায় স্থানান্তর করুন

RecyclerView হলো একটি ভিউ কম্পোনেন্ট যা বিপুল পরিমাণ ডেটা সেটকে দক্ষতার সাথে প্রদর্শন করা সহজ করে তোলে। ডেটা সেটের প্রতিটি আইটেমের জন্য আলাদা ভিউ তৈরি করার পরিবর্তে, RecyclerView অল্প সংখ্যক ভিউয়ের একটি পুল তৈরি করে রাখে এবং আপনি যখন আইটেমগুলো স্ক্রল করেন, তখন সেগুলোকে রিসাইকেল করে আপনার অ্যাপের পারফরম্যান্স উন্নত করে।

Compose-এ, আপনি একই কাজ করার জন্য Lazy lists ব্যবহার করতে পারেন। এই পৃষ্ঠায় বর্ণনা করা হয়েছে কিভাবে আপনি আপনার RecyclerView ইমপ্লিমেন্টেশনকে Compose-এ Lazy lists ব্যবহার করার জন্য মাইগ্রেট করতে পারেন।

অভিবাসনের পদক্ষেপ

আপনার RecyclerView ইমপ্লিমেন্টেশনকে Compose-এ মাইগ্রেট করতে, এই ধাপগুলো অনুসরণ করুন:

  1. আপনার 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>
    
  2. আপনার RecyclerView এর লেআউট ম্যানেজারের উপর ভিত্তি করে আপনার কোন ধরনের লেজি লিস্ট কম্পোজেবল প্রয়োজন তা নির্ধারণ করুন (নিচের সারণিটি দেখুন)। আপনি যে কম্পোজেবলটি নির্বাচন করবেন, সেটি হবে পূর্ববর্তী ধাপে আপনার যোগ করা ComposeView এর শীর্ষ-স্তরের কম্পোজেবল।

    LayoutManager

    রচনাযোগ্য

    LinearLayoutManager

    LazyColumn বা LazyRow

    GridLayoutManager

    LazyVerticalGrid বা LazyHorizontalGrid

    StaggeredGridLayoutManager

    LazyVerticalStaggeredGrid অথবা 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
        }
    }

  3. আপনার 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() মেথডগুলোর লজিক এই কম্পোজেবলগুলো এবং সেগুলোর জন্য আপনার সরবরাহ করা স্টেট দ্বারা প্রতিস্থাপিত হবে। কম্পোজে, কোনো আইটেমের জন্য কম্পোজেবল তৈরি করা এবং তাতে ডেটা বাইন্ড করার মধ্যে কোনো বিভাজন নেই—এই ধারণাগুলো একীভূত।

  4. লেজি লিস্টের 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-এ স্থানান্তর করার বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত রিসোর্সগুলি দেখুন:

{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}