Skip to content

Instantly share code, notes, and snippets.

@Saravana2
Created September 23, 2020 18:43
Show Gist options
  • Save Saravana2/940bfc49c9dabf6655137a2407cf09b3 to your computer and use it in GitHub Desktop.
Save Saravana2/940bfc49c9dabf6655137a2407cf09b3 to your computer and use it in GitHub Desktop.
Reduce Recycler view adapter boilerplate code using data binding
val adapter = MyAdapter(R.layout.item_adapter, arrayListOf("data1","data2"))
adapter.setOnItemClickListener(listener)
recyclerView.adapter = adapter
class MyAdapter<T>(var layoutId:Int, var data:List<T>) : MyBaseAdapter(){
var commonLayoutBRVariable=BR.adapterData
private var onItemClickListener:OnItemClickListener<T>?=null
fun setOnItemClickListener(onItemClickListener:OnItemClickListener<T>?){
this.onItemClickListener=onItemClickListener
}
fun setLayoutBrVariable(varName:Int){
this.commonLayoutBRVariable=varName
}
override fun bindData(position: Int, binding: ViewDataBinding) {
binding.setVariable(commonLayoutBRVariable,data[position])
binding.root.setOnClickListener { this.onItemClickListener?.onItemClicked(data[position],position) }
binding.executePendingBindings()
}
override fun getLayoutIdByPosition(position: Int): Int {
return layoutId
}
override fun getItemCount(): Int {
return data.size
}
}
abstract class MyBaseAdapter : RecyclerView.Adapter<MyBaseAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder{
/*Used layout id as View Type */
val binding = DataBindingUtil.inflate<ViewDataBinding>(
LayoutInflater.from(parent.context),
viewType,
parent,
false
)
return MyViewHolder(binding)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
bindData(position,holder.binding)
}
override fun getItemViewType(position: Int): Int {
/*Used layout id as View Type */
return getLayoutIdByPosition(position)
}
abstract fun bindData(position:Int,binding: ViewDataBinding)
abstract fun getLayoutIdByPosition(position: Int): Int
class MyViewHolder(val binding: ViewDataBinding) : RecyclerView.ViewHolder(binding.root)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment