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

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

রচনায়, আপনি একই জিনিসটি সম্পন্ন করতে অলস তালিকা ব্যবহার করতে পারেন। এই পৃষ্ঠাটি বর্ণনা করে যে আপনি কীভাবে আপনার RecyclerView বাস্তবায়ন স্থানান্তর করতে পারেন রচনায় অলস তালিকা ব্যবহার করতে।

মাইগ্রেশন পদক্ষেপ

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

  1. মন্তব্য করুন বা আপনার UI শ্রেণিবিন্যাস থেকে RecyclerView সরান এবং এটিকে প্রতিস্থাপন করতে একটি 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()
        }
    }
}

আইটেম অ্যানিমেশন

অ্যাডাপ্টারে পরিবর্তন করার সাথে সাথে আইটেমগুলির উপস্থিতি অ্যানিমেট করতে একটি ItemAnimator একটি RecyclerView সেট করা যেতে পারে। ডিফল্টরূপে, RecyclerView DefaultItemAnimator ব্যবহার করে যা ইভেন্টগুলি সরানো, যোগ করা এবং সরানোর জন্য মৌলিক অ্যানিমেশন সরবরাহ করে।

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

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

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

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}