Created
October 2, 2022 10:48
-
-
Save m7mdra/081be1db632d136d35e866a8c89a2942 to your computer and use it in GitHub Desktop.
Simple list Recycler view adapter that support single item type
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SimpleList(list = it.list, | |
viewHolderCreate = { | |
ItemViewHolder( | |
RowItemBinding.inflate( | |
layoutInflater, | |
it, | |
false | |
) | |
) | |
}, | |
bindCallback = { viewHolder: ItemViewHolder, item: Item, i: Int -> | |
viewHolder.itemNameTextView.text = item.name | |
}, | |
clickCallback = { i: Int, item: Item -> | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
typealias BindCallback<T, ViewHolder> = (ViewHolder, T, Int) -> Unit | |
typealias ViewHolderCreate<ViewHolder> = (ViewGroup) -> ViewHolder | |
typealias ClickCallback<T> = (Int, T) -> Unit | |
class SimpleList<T, ViewHolder : RecyclerView.ViewHolder>( | |
private val list: List<T>, | |
private val viewHolderCreate: ViewHolderCreate<ViewHolder>, | |
private val bindCallback: BindCallback<T, ViewHolder>? = null, | |
private val clickCallback: ClickCallback<T>? = null | |
) : RecyclerView.Adapter<ViewHolder>() { | |
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { | |
return viewHolderCreate(parent) | |
} | |
override fun onBindViewHolder(holder: ViewHolder, position: Int) { | |
holder.itemView.setOnClickListener { | |
clickCallback?.invoke(position, list[position]) | |
} | |
bindCallback?.invoke(holder, list[position], position) | |
} | |
override fun getItemCount(): Int = list.size | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment