Kotlin封装的Recyclerview的两种通用adapter
这两种Adapter都是只能展示单一数据类型,也就是一种布局,请大家注意哈
2.1.5
1.引包
第一步:添加jitpack地址
在工程下的build.gradle文件中添加:
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}
第二步:添加依赖
在module的build.gradle文件中添加依赖(把Tag换成最新版本):
dependencies {
implementation 'com.github.wufengfeilong:KtBaseAdapter:tag'
}
class MyAdapter: KtBaseAdapter{
constructor(mList: List?, mLayoutId: Int?) : super(mList, mLayoutId)
// 重写convert方法,用来将数据填充到每个item view中
override fun convert(itemView : View?, item: UserInfo) {
itemView!!.photo_iv.setImageResource(R.drawable.using)
itemView!!.textView.text = item.name
// 设置item中控件的点击事件(如果不需要可以不做这一步)
itemView!!.button
.setOnClickListener { Toast.makeText(itemView.context, "click:" + item.name, Toast.LENGTH_SHORT).show() }
}
}
val mAdapter = MyAdapter(mList, R.layout.list_item)
rv.adapter = mAdapter
mAdapter!!.setItemClickListener(object : KtBaseAdapter.ItemClick {
override fun OnItemClick(v: View, position: Int) {
Toast.makeText(this@MainActivity, "click$position", Toast.LENGTH_SHORT).show()
}
})
mAdapter.updateData(mList)
使用了DataBinding后就不用自定义Adapter了,除非你想添加item里面的控件的点击事件
1.创建Adapter方式:
val mAdapter = KtDBBaseAdapter(mList, R.layout.db_list_item,BR.userInfo)
rv.adapter = mAdapter
就这两句话就搞定了,前提是已经在item的布局中将binding和数据绑定好
class MyAdapter:KtDBBaseAdapter{
constructor(mList: List?, layoutId: Int?, brId: Int?) : super(mList, layoutId, brId)
override fun convert(itemView: View?, item: UserInfo) {
// 控件中的点击事件设置
itemView!!.button
.setOnClickListener { Toast.makeText(itemView.context, "click:" + item.name, Toast.LENGTH_SHORT).show() }
}
}
val mAdapter = MyAdapter(mList, R.layout.db_list_item,BR.userInfo)
rv.adapter = mAdapter
mAdapter!!.setItemClickListener(object : KtBaseAdapter.ItemClick {
override fun OnItemClick(v: View, position: Int) {
Toast.makeText(this@MainActivity, "click$position", Toast.LENGTH_SHORT).show()
}
})
mAdapter.updateData(mList)
好了,以上就是这两种通用Adapter的使用方法,是不是很简单呢?当然,上面只是Kotlin的用法,Java用法也差不多,步骤是一样的,就是写法稍微有点差别,并不难。
Kotlin之通用Adapter Github地址