之前刚用kotlin 的时候,很多语言的特性,由于不熟悉都没有应用,最近修改了一下
abstract class BaseAdapter<T, B : ViewBinding?> :
RecyclerView.Adapter<BaseAdapter.ViewHolder<B>> {
lateinit var onItemClick: (view: View, pos:Int)->Unit
protected var mDatas: ArrayList<T>? = null
protected var context: android.content.Context
fun getmDatas(): ArrayList<T>? {
return mDatas
}
fun setmDatas(mDatas:ArrayList<T>?){
this.mDatas = mDatas
}
constructor(context: android.content.Context) {
this.context = context
}
constructor(context: android.content.Context, mDatas: ArrayList<T>?) {
this.mDatas = mDatas
this.context = context
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): BaseAdapter.ViewHolder<B> {
val inflater = LayoutInflater.from(context)
val binding = setBinding(inflater, parent)
val viewHolder =
BaseAdapter.ViewHolder<B>(binding!!.root,onItemClick)
viewHolder.setBindingInstance(binding)
return viewHolder
}
override fun onBindViewHolder(
holder: ViewHolder<B>,
position: Int
) {
val myholder =
holder
onBindHolder(myholder, position)
}
protected abstract fun onBindHolder(
holder: BaseAdapter.ViewHolder<B>,
position: Int
)
override fun getItemViewType(position: Int): Int {
return position
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
protected abstract fun setBinding(inflater: LayoutInflater, parent: ViewGroup): B
override fun getItemCount(): Int {
return if (mDatas == null) 0 else mDatas!!.size
}
class ViewHolder<B : ViewBinding?>(itemView:View,var onItemClick:(view: View, pos:Int)->Unit) :
RecyclerView.ViewHolder(itemView), View.OnClickListener {
var binding: B? = null
fun setBindingInstance(binding: B): kotlin.Unit {
this.binding = binding
}
fun setClick(vararg views:View){
if (onItemClick != null) {
for (view in views) {
view.setOnClickListener(this)
}
}
}
override fun onClick(v: View) {
onItemClick(v, getAdapterPosition())
}
}
}