Kotlin笔记(50) — RecyclerView适配器基类
2021-02-05 本文已影响0人
奔跑的佩恩
前言
在Android
开发过程中,我们在用RecyclerView
的时候,会涉及到RecyclerView
适配器的问题,为了减少在写适配器时的代码,我们需要封装一个RecyclerView适配器基类,那么下面就来讲讲RecyclerView适配器基类的封装吧。
今天涉及知识有:
- 依赖
- 继承适配器基类RecyclerBaseAdapter写一个适配器TestAdapter
- TestAdapter在Activity中的使用
- 效果图和项目结构图
- 适配器基类RecyclerBaseAdapter源码
先来波效果图
效果图.gif
一. 依赖
使用RecyclerView及为了简化ViewHodler初始化,我们需要在app_module
对应的build.gradle
中添加以下依赖:
android {
//@Parcelize标记需要设置 experimental = true
//LayoutContainer插件(适配器的viewHolder不用初始化控件)需要设置 experimental = true
androidExtensions {
experimental = true
}
dependencies {
//RecyclerView引用
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha04'
//其他代码省略
//......
}
}
RecyclerView
引用的最新版本,可以查看Android中文网
二.继承适配器基类RecyclerBaseAdapter写一个适配器TestAdapter
为了简化RecyclerView
适配器的编写,我封装了一个适配器基类RecyclerBaseAdapter
,然后继承它编写了自己的适配TestAdapter
,下面贴出TestAdapter
代码:
class TestAdapter<T> : RecyclerBaseAdapter<T> {
private var mIndex: Int = -1
constructor(data: MutableList<T>?, context: Context) : super(
R.layout.recycler_item,
data,
context
) {}
fun setIndex(index: Int) {
this.mIndex = index
}
override fun <T> BindFunction(containerView: View, mData: MutableList<T>?, position: Int) {
var title: TextView = containerView.findViewById(R.id.mTitle)
var itemView: ConstraintLayout = containerView.findViewById(R.id.mContentView)
//设置值
var item: String = mData!!.get(position).toString()
//名称
title.text = item
//设置背景
title.setBackgroundColor(
if (position == mIndex) {
Color.BLUE
} else {
Color.GREEN
}
)
//点击事件
itemView.setOnClickListener(View.OnClickListener {
if (mOnItemClickListener != null) {
mOnItemClickListener!!.onItemClick(itemView,position)
}
})
}
}
三.TestAdapter在Activity中的使用
下面贴出TestAdapter
在MainActivity
中使用代码:
open class MainActivity : AppCompatActivity(), View.OnClickListener {
private var nameList:MutableList<String> = mutableListOf("幼稚园","小学","初中","高中","大学")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(com.kotlintest.R.layout.activity_main)
initData()
setListener()
}
private fun initData() {
mRecyclerView.layoutManager = LinearLayoutManager(this)
var testAdapter: TestAdapter<String> = TestAdapter(nameList,this)
mRecyclerView.adapter=testAdapter
mRecyclerView.itemAnimator = DefaultItemAnimator() //设置动画
//点击事件
testAdapter.setOnItemClickListener(object : RecyclerBaseAdapter.OnItemClickListener {
override fun onItemClick(view: View, position: Int) {
testAdapter.setIndex(position)
testAdapter.notifyDataSetChanged()
toast("==wo==点击了 ${nameList.get(position)}=")
}
})
}
private fun setListener(){
mBtnTest.setOnClickListener(this@MainActivity)
}
override fun onClick(v: View) {
when(v.id){
com.kotlintest.R.id.mBtnTest -> {
}
}
}
}
四.效果图和项目结构图
效果图.gif项目结构图.png
五.适配器基类RecyclerBaseAdapter源码
下面贴出适配器基类RecyclerBaseAdapter
源码: