Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.view.LayoutInflater
- import android.view.ViewGroup
- import androidx.databinding.DataBindingUtil
- import androidx.databinding.ViewDataBinding
- import androidx.recyclerview.widget.RecyclerView
- /**
- * NB : Used in RS
- */
- open class AnyViewModelAdapter<MODEL, BINDING : ViewDataBinding>(
- val layoutId: Int,
- val items: MutableList<MODEL>,
- val clickHandler: ((data: MODEL) -> Unit)? = null
- ) : RecyclerView.Adapter<AnyViewModelHolder<MODEL, BINDING>>() {
- constructor(layoutId: Int, clickHandler: ((data: MODEL) -> Unit)?) : this(layoutId, mutableListOf(), clickHandler)
- constructor(layoutId: Int) : this(layoutId, mutableListOf(), null)
- protected lateinit var binding: BINDING
- open fun onBindedViewHolder(holder: AnyViewModelHolder<MODEL, BINDING>, data: MODEL) {}
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AnyViewModelHolder<MODEL, BINDING> {
- return AnyViewModelHolder(
- DataBindingUtil.inflate(
- LayoutInflater.from(parent.context),
- layoutId,
- parent,
- false
- )
- )
- }
- override fun getItemCount(): Int = items.size
- override fun onBindViewHolder(holder: AnyViewModelHolder<MODEL, BINDING>, position: Int) {
- holder.bind(items[position])
- clickHandler?.let { handler ->
- holder.itemView.setOnClickListener {
- handler(items[position])
- }
- }
- onBindedViewHolder(holder, items[position])
- }
- fun replace(newItems: List<MODEL>, notify: Boolean = true) {
- items.clear()
- items.addAll(newItems)
- if (notify) notifyDataSetChanged()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement