Created
September 23, 2020 18:43
-
-
Save Saravana2/940bfc49c9dabf6655137a2407cf09b3 to your computer and use it in GitHub Desktop.
Reduce Recycler view adapter boilerplate code using data binding
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
val adapter = MyAdapter(R.layout.item_adapter, arrayListOf("data1","data2")) | |
adapter.setOnItemClickListener(listener) | |
recyclerView.adapter = adapter |
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
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 | |
} | |
} |
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
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