ui / winkit.android.ui / PaginatedRecyclerView / Adapter

Adapter

abstract class Adapter<VH : ViewHolder> : Adapter<ViewHolder>

Adapter abstraction to provide data to PaginatedRecyclerView

Example without define custom empty or error layouts

class MyCustomAdapter: PaginatedRecyclerView.Adapter<Adapter.Holder>() {

override fun onBindRowViewHolder(holder: Holder, position: Int) = holder.bind(data[position])

    val data: ArrayList<String> = ArrayList()

    override fun getRowsCount(): Int = data.size

    override fun clean() = data.clear()

    override fun onCreateRowViewHolder(parent: ViewGroup, type: Int): Holder = Holder(parent)

    fun append (toAppend: List<String>) = data.addAll(toAppend)

    class Holder(parent: ViewGroup): RecyclerView.ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row, parent, false)) {
        fun bind (text: String){
           itemView.findViewById<TextView>(R.id.row_text)?.text = text
        }
    }
}

Example without defining custom empty or error layouts

 class CustomLayoutAdapter: PaginatedRecyclerView.Adapter<CustomLayoutAdapter.Holder>(
     errorLayout = R.layout.custom_error_layout,
     emptyLayout = R.layout.custom_empty_layout
 ) {

     override fun onBindRowViewHolder(holder: Holder, position: Int) = holder.bind(data[position])

     val data: ArrayList<String> = ArrayList()

     override fun getRowsCount(): Int = data.size
     override fun clean() = data.clear()

     override fun onCreateRowViewHolder(parent: ViewGroup, type: Int): Holder = Holder(parent)

     fun append(toAppend: List<String>) = data.addAll(toAppend)

     class Holder(parent: ViewGroup) : RecyclerView.ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row, parent, false)) {
         fun bind(text: String) {
             itemView.findViewById<TextView>(R.id.row_text)?.text = text
         }
     }

     override fun bindEmptyView(title: String?, subtitle: String?, image: Int, view: View) {
         // Implement custom empty recyclerView logic here

         val titleView = view.findViewById<TextView>(winkit.android.ui.R.id.empty_title)
         titleView.text = "$title $subtitle"

         val iconView = view.findViewById<ImageView>(winkit.android.ui.R.id.empty_icon)
         if (image != 0) iconView.setImageResource(image)
         else  iconView.setImageDrawable(null)
     }

     override fun bindErrorView(message: String?, image: Int, view: View) {
         // Implement custom error recyclerView logic here

         val iconView = view.findViewById<ImageView>(winkit.android.ui.R.id.error_icon)
         if (image != 0) iconView.setImageResource(image)
         else  iconView.setImageDrawable(null)
         iconView.visibility = if(image != 0) View.VISIBLE else View.GONE

         val button = view.findViewById<Button>(winkit.android.ui.R.id.error_retry_button)
         button.setOnClickListener { this.recyclerView?.requestFirstPage()}
         button.text = message
     }
}

Parameters

emptyLayout - The empty layout resource

errorLayout - The error layout resource

Constructors

Name Summary
<init> Adapter(emptyLayout: Int = R.layout.view_paginated_recycler_empty, errorLayout: Int = R.layout.view_paginated_recycler_error)
Adapter abstraction to provide data to PaginatedRecyclerView

Properties

Name Summary
emptyLayout val emptyLayout: Int
The empty layout resource
errorLayout val errorLayout: Int
The error layout resource
recyclerView var recyclerView: PaginatedRecyclerView?

Functions

Name Summary
bindEmptyView open fun bindEmptyView(title: String?, subtitle: String?, image: Int, view: View): Unit
Executed before show the empty data message. Override in case of custom layouts or binding implementation.
bindErrorView open fun bindErrorView(message: String?, image: Int, view: View): Unit
Executed before show the empty data message. Override in case of custom layouts or binding implementation.
clean abstract fun clean(): Unit
Perform the data clean
getItemCount fun getItemCount(): Int
getItemViewType fun getItemViewType(position: Int): Int
getRowViewType open fun getRowViewType(position: Int): Int
Replace RecyclerView.Adapter.getItemViewType
getRowsCount abstract fun getRowsCount(): Int
Replace RecyclerView.Adapter.getItemCount
onBindRowViewHolder abstract fun onBindRowViewHolder(holder: VH, position: Int): Unit
Replace RecyclerView.Adapter.onBindViewHolder
onBindViewHolder fun onBindViewHolder(holder: ViewHolder, position: Int): Unit
onCreateRowViewHolder abstract fun onCreateRowViewHolder(parent: ViewGroup, type: Int): VH
Replace RecyclerView.Adapter.onCreateViewHolder
onCreateViewHolder fun onCreateViewHolder(parent: ViewGroup, p1: Int): ViewHolder
showError fun showError(message: String): Unit
Clean the data and showing the “error” recyclerView with the selected message.