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

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

কম্পোজে, আপনি একই কাজ সম্পন্ন করার জন্য Lazy lists ব্যবহার করতে পারেন। এই পৃষ্ঠাটি বর্ণনা করে যে কীভাবে আপনি আপনার RecyclerView বাস্তবায়নকে Compose-এ Lazy lists ব্যবহার করতে স্থানান্তর করতে পারেন।

মাইগ্রেশনের ধাপগুলি

আপনার RecyclerView বাস্তবায়নকে Compose-এ স্থানান্তর করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার UI অনুক্রম থেকে RecyclerView মন্তব্য করুন অথবা সরিয়ে দিন এবং অনুক্রমের মধ্যে যদি এখনও কোনটি উপস্থিত না থাকে তবে এটি প্রতিস্থাপন করার জন্য একটি ComposeView যোগ করুন। এটি Lazy তালিকার জন্য ধারক যা আপনি যোগ করবেন:

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

    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() পদ্ধতির লজিক এই কম্পোজেবল এবং আপনি যে অবস্থা প্রদান করেন তা দ্বারা প্রতিস্থাপিত হবে। Compose-এ, একটি আইটেমের জন্য কম্পোজেবল তৈরি করা এবং এতে ডেটা বাঁধার মধ্যে কোনও বিচ্ছেদ নেই - এই ধারণাগুলি একত্রিত হয়।

  4. Lazy তালিকার (trailing lambda প্যারামিটার) content স্লটের মধ্যে, আপনার তালিকার ডেটা পুনরাবৃত্তি করতে items() ফাংশন (অথবা সমতুল্য ওভারলোড) ব্যবহার করুন। itemContent lambda-তে, আপনার ডেটার জন্য উপযুক্ত কম্পোজেবল আইটেমটি ব্যবহার করুন:

    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 ব্যবহার করে যা ইভেন্টগুলি সরানো, যোগ করা এবং সরানোর ক্ষেত্রে মৌলিক অ্যানিমেশন সরবরাহ করে।

animateItemPlacement মডিফায়ারের মাধ্যমে অলস তালিকার ধারণাটি একই রকম। আরও জানতে আইটেম অ্যানিমেশনগুলি দেখুন।

অতিরিক্ত সম্পদ

একটি RecyclerView কে কম্পোজে স্থানান্তরিত করার বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত সংস্থানগুলি দেখুন:

{% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %} {% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %}