Kotlin封裝的Recyclerview的兩種通用adapter
1. KtBaseAdapter:普通的通用Adapter
2. KtDBBaseAdapter:結(jié)合DataBinding的通用Adapter弊知,使用了binding的好處是瞳脓,可以不用自定義Adapter了。
這兩種Adapter都是只能展示單一數(shù)據(jù)類型景用,也就是一種布局盗迟,請大家注意哈
?軟件目前最新版本
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'
}
?使用說明之KtBaseAdapter:普通的通用Adapter
1. 自定義一個Adapter坤邪,繼承自KtBaseAdapter:為了把數(shù)據(jù)填充到Adapter中
class MyAdapter: KtBaseAdapter<UserInfo>{
? ? ? ? constructor(mList: List<UserInfo>?, mLayoutId: Int?) : super(mList, mLayoutId)
? ? ? ? // 重寫convert方法,用來將數(shù)據(jù)填充到每個item view中
? ? ? ? override fun convert(itemView : View?, item: UserInfo) {
? ? ? ? ? ? itemView!!.photo_iv.setImageResource(R.drawable.using)
? ? ? ? ? ? itemView!!.textView.text = item.name
? ? ? ? ? ? // 設(shè)置item中控件的點擊事件(如果不需要可以不做這一步)
? ? ? ? ? ? itemView!!.button
? ? ? ? ? ? ? ? .setOnClickListener { Toast.makeText(itemView.context, "click:" + item.name, Toast.LENGTH_SHORT).show() }
? ? ? ? }
? ? }
2. 創(chuàng)建自定義Adapter罚缕,將數(shù)據(jù)源和布局文件作為參數(shù)傳進(jìn)去
val mAdapter = MyAdapter(mList, R.layout.list_item)
rv.adapter = mAdapter
3. 設(shè)置item view的點擊事件(非必需)
mAdapter!!.setItemClickListener(object : KtBaseAdapter.ItemClick {
? ? ? ? ? ? override fun OnItemClick(v: View, position: Int) {
? ? ? ? ? ? ? ? Toast.makeText(this@MainActivity, "click$position", Toast.LENGTH_SHORT).show()
? ? ? ? ? ? }
? ? ? ? })
4. 更新數(shù)據(jù)
mAdapter.updateData(mList)
使用說明之KtDBBaseAdapter:結(jié)合DataBinding的通用Adapter
使用了DataBinding后就不用自定義Adapter了艇纺,除非你想添加item里面的控件的點擊事件
1.創(chuàng)建Adapter方式:
- 如果不需要item里面控件的點擊事件可以直接用KtDBBaseAdapter
val mAdapter = KtDBBaseAdapter(mList, R.layout.db_list_item,BR.userInfo)
rv.adapter = mAdapter
就這兩句話就搞定了,前提是已經(jīng)在item的布局中將binding和數(shù)據(jù)綁定好
- 需要item里面控件的點擊事件可以自定義Adapter邮弹,黔衡,繼承自KtDBBaseAdapter:這個目的僅僅是為了完成item中控件的點擊事件
class MyAdapter:KtDBBaseAdapter<UserInfo>{
? ? ? ? constructor(mList: List<UserInfo>?, layoutId: Int?, brId: Int?) : super(mList, layoutId, brId)
? ? ? ? override fun convert(itemView: View?, item: UserInfo) {
? ? ? ? ? ? // 控件中的點擊事件設(shè)置
? ? ? ? ? ? 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)
2. 設(shè)置Adapter
rv.adapter = mAdapter
3. 設(shè)置item view的點擊事件(非必需)
mAdapter!!.setItemClickListener(object : KtBaseAdapter.ItemClick {
? ? ? ? ? ? override fun OnItemClick(v: View, position: Int) {
? ? ? ? ? ? ? ? Toast.makeText(this@MainActivity, "click$position", Toast.LENGTH_SHORT).show()
? ? ? ? ? ? }
? ? ? ? })
4. 更新數(shù)據(jù)
mAdapter.updateData(mList)
好了,以上就是這兩種通用Adapter的使用方法肠鲫,是不是很簡單呢员帮?當(dāng)然,上面只是Kotlin的用法导饲,Java用法也差不多捞高,步驟是一樣的,就是寫法稍微有點差別渣锦,并不難硝岗。