انتقال RecyclerView به فهرست تنبل

RecyclerView یک عنصر «نما» است که نمایش کارآمد مجموعه‌های بزرگ داده را آسان می‌کند. به‌جای ایجاد نما برای هر عنصر در مجموعه داده، RecyclerView با حفظ مجموعه کوچکی از نماها و بازیافت آن‌ها هنگام پیمایش در میان عناصر، عملکرد برنامه‌تان را بهبود می‌بخشد.

در «نوشتن»، می‌توانید از فهرست‌های تنبل برای انجام همان کار استفاده کنید. این صفحه نحوه انتقال پیاده‌سازی RecyclerView برای استفاده از فهرست‌های «تنبل» در Compose را شرح می‌دهد.

مراحل انتقال

برای انتقال پیاده‌سازی RecyclerView به Compose، این مراحل را دنبال کنید:

  1. 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 نگاشت می‌شود، اگرچه همیشه این‌گونه نیست. از این عناصر ترکیبی به‌عنوان نمایشگر میانای کاربری برای انواع مختلف عناصر در فهرستتان استفاده خواهد شد:

    @Composable
    fun ListItem(data: MyData, modifier: Modifier = Modifier) {
        Row(modifier.fillMaxWidth()) {
            Text(text = data.name)
            // … other composables required for displaying `data`
        }
    }

    منطق موجود در روش‌های onCreateViewHolder() و onBindViewHolder() در RecyclerView.Adapter با این عناصر ترکیبی و وضعیت‌هایی که به آن‌ها ارائه می‌دهید جایگزین خواهد شد. در «نوشتن»، بین ایجاد یک عنصر ترکیبی برای یک مورد و پیوند دادن داده‌ها به آن تفاوتی وجود ندارد—این مفاهیم با هم ترکیب می‌شوند.

  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)

«نوشتن» مفهوم معادل برای تزئینات مورد ندارد. درعوض، می‌توانید هرگونه تزئینات میانای کاربری را مستقیماً در فهرست ترکیب اضافه کنید. برای مثال، برای افزودن جداکننده‌ها به فهرست، می‌توانید از عنصر ترکیبی Divider پس‌از هر مورد استفاده کنید:

LazyColumn(Modifier.fillMaxSize()) {
    itemsIndexed(data) { index, d ->
        ListItem(d)
        if (index != data.size - 1) {
            HorizontalDivider()
        }
    }
}

پویانمایی‌های مورد

می‌توان ItemAnimator را روی RecyclerView تنظیم کرد تا ظاهر عناصر را با تغییرات ایجادشده در آداپتور پویانمایی کند. به‌طور پیش‌فرض، RecyclerView از DefaultItemAnimator استفاده می‌کند که پویانمایی‌های پایه را برای برداشتن، افزودن، و انتقال رویدادها ارائه می‌دهد.

فهرست‌های تنبل ازطریق اصلاح‌گر animateItemPlacement مفهوم مشابهی دارند. برای کسب اطلاعات بیشتر، پویانمایی‌های مورد را ببینید.

منابع بیشتر

برای اطلاعات بیشتر درباره انتقال RecyclerView به Compose، منابع زیر را ببینید: