简体   繁体   English

android kotlin如何实现嵌套分页?

[英]How to implement nested paging in android kotlin?

I have a recyclerview, for i using pagin 3 with coroutine live data.我有一个 recyclerview,因为我将 pagin 3 与协程实时数据一起使用。 but child recyclerview also have paginate data so how can i perform this nested pagination in android kotlin.但是子 recyclerview 也有分页数据,所以我如何在 android kotlin 中执行此嵌套分页。

So, I done this with pagination for child recyclerview inside recyclerview.因此,我通过在 recyclerview 中对子 recyclerview 进行分页来完成此操作。 Firstly of all call api for fetch dates and perform api for every date at same time when date are fetching.首先调用 api 获取日期,并在获取日期的同时对每个日期执行 api。

so structure like this...所以像这样的结构......

lateinit var adapter: WeeklyAdapter
lateinit var dayAdapter: DayDetailsPagingAdapter


    private fun observeData() {
        viewModel.weeklyAcquiringDetails(AcquiringVM.WEEKLY, "").observe(this){
            wsWithLoader(it){
                binding.rvAcquiringWeeklyDetails.adapter = WeeklyAdapter(it.data!!.data, object : WeeklyAdapter.OnPerformApi{
                    override fun performApi(date: String, rvMonthly: RecyclerView) {
                        dayAdapter = DayDetailsPagingAdapter(object  : DayDetailsPagingAdapter.OnClick{
                            override fun onClick(result: DayAcquiring.Data) {}
                        })
                        rvMonthly.adapter = dayAdapter
                        lifecycleScope.launchWhenCreated {
                            viewModel.getDayAcquiringDetails(date).collectLatest { data ->
                                dayAdapter.submitData(data)
                            }
                        }
                    }
                })
            }
        }
    }

Weekly Adapter每周适配器

class WeeklyAdapter ( val list: List<WeeklyAcquiring.Data>, val action: OnPerformApi ): RecyclerView.Adapter<WeeklyAdapter.ViewHolder>() { class WeeklyAdapter ( val list: List<WeeklyAcquiring.Data>, val action: OnPerformApi ): RecyclerView.Adapter<WeeklyAdapter.ViewHolder>() {

    @NonNull
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.context), R.layout.list_monthly, parent, false))
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val result = list[position]
        holder.binding.apply {
            tvDate.text = changeDateFormat(result.doctorScheduleDate,"yyyy-MM-dd","E, dd MMM yyyy")
            action.performApi( result.doctorScheduleDate , rvMonthly)
        }
    }

    override fun getItemCount(): Int {
        return list.size
    }

    inner class ViewHolder(binding: ListMonthlyBinding) : BaseViewHolder<ListMonthlyBinding>(binding) {}

    interface OnPerformApi{
        fun performApi(date : String, rvMonthly: RecyclerView)
    }
    }

list_monthly_layout list_monthly_layout

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvDate"
            style="@style/TVBold"
            android:layout_marginTop="@dimen/_5sdp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/_12sdp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="May 2022" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rvMonthly"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/_10sdp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintStart_toStartOf="parent"
            tools:listitem="@layout/list_acquiring_details"
            app:layout_constraintTop_toBottomOf="@+id/tvDate" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

DayDetailsPagingAdapter DayDetailsPagingAdapter

class DayDetailsPagingAdapter (private val onClick: OnClick) : PagingDataAdapter<DayAcquiring.Data, DayDetailsPagingAdapter.ViewHolder>(DiffCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    return ViewHolder(ListAcquiringDetailsBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}

@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val result = getItem(position)!!
    holder.binding.apply {
        data = result
        tvName.text = result.userName
        tvAmount.text = "€ ${result.amount}"
    }
}

class ViewHolder(val binding: ListAcquiringDetailsBinding) : RecyclerView.ViewHolder(binding.root) {}

private class DiffCallback : DiffUtil.ItemCallback<DayAcquiring.Data>() {
    override fun areItemsTheSame(
        oldItem: DayAcquiring.Data,
        newItem: DayAcquiring.Data
    ): Boolean = oldItem == newItem

    override fun areContentsTheSame(
        oldItem: DayAcquiring.Data,
        newItem: DayAcquiring.Data
    ): Boolean = oldItem == newItem
}

interface OnClick {
    fun onClick(result: DayAcquiring.Data )
}
}

**in viewmodel ** **在视图模型中**

fun getDayAcquiringDetails( date: String ) = apiHelper.getDayAcquiringDetails( date ).cachedIn(viewModelScope)
fun weeklyAcquiringDetails( filter: String ,  date: String) = apiHelper.weeklyAcquiringDetails( filter , date)

hope you like this.希望你喜欢这个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 Kotlin 中实现 Android 分页 - How to implement Android paging in Kotlin 如何使用 Kotlin 从 Paging 3 Android 获取总项目以实现每个项目的 onclicklistener? - How to get total items from Paging 3 Android using Kotlin to implement onclicklistener for each item? 如何观察 LiveData<pagedlist> 在 kotlin 中使用 android 分页</pagedlist> - How to observe LiveData<PagedList> with android paging in kotlin 如何在kotlin中购买Android应用程序? - How to implement Android in app purchase in kotlin? 如何使用kotlin在android shopapp中实现shopify api? - How to implement shopify api in android shopapp with kotlin? 如何在Android中的Kotlin的RecycleView中实现onItemClick和onLongItemClick - How to implement onItemClick and onLongItemClick in RecycleView for Kotlin in android 如何从Android中的Java实现Kotlin类? - How to implement Kotlin class from java in android? 如何正确实现corroutines/room? Kotlin Android - How to implement corroutines/room correctly? Kotlin Android 如何为 Room 实体实现 inheritance (Android, Kotlin) - How to implement inheritance for a Room entity (Android, Kotlin) 如何在 Android Java 中使用 Kotlin 库之前实现回调(Kotlin) - How to implement Callback(Kotlin) before use Kotlin lib in Android Java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM