abstract class BaseQuickAdapter(var mList: ArrayList = arrayListOf()) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { abstract fun getLayoutId(): Int
protected open fun initView(bean: T, itemView: View, position: Int) {
itemView.setOnClickListener {
itemClick(bean, position)
}
}
lateinit var itemClick: (T, Int) -> Unit
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(getLayoutId(), parent, false)
return BaseViewHolder(view)
}
inner class BaseViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindToItem(bean: T) {
initView(bean, itemView, adapterPosition)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
(holder as BaseQuickAdapter<T>.BaseViewHolder).bindToItem(mList[position])
}
override fun getItemCount(): Int {
return mList.size
}
fun update(list: List<T>) {
if (list.size < 0)
return
mList.apply {
if (size > 0) clear()
addAll(list)
notifyDataSetChanged()
}
}
fun addData(list: List<T>) {
mList.addAll(list)
notifyDataSetChanged()
}
fun addData(item: T) {
mList.add(item)
notifyDataSetChanged()
}
} lateinit var itemClick: (T, Int) -> Unit相当于java里的onCliListener接口.
实际使用: 直接实例化对象就行了 TestAdapter()
list已经封装在内部,也可以传入list参数。
注意:需要实现itemClick,不然点击item会闪退
例子: itemClick={b,i->
//test()
}
class TestAdapter():BaseQuickAdapter { override fun getLayoutId(): Int { return R.layout.item_test }
override fun initView(bean: TestBean, itemView: View, position: Int) {
super.initView(bean, itemView, position)
bean.apply{
itemView.apply {
tv_title=bean.title
}
}
}
}