前言
RecyclerView是在Android5.0版别作为support-v7的一个组件出现,高效代替了最初的ListView等列表组件。使用上完成了视图代码解耦,功能上具备强壮的item复用机制,并且提供默认多种LayoutMananger用来处理多种布局,本篇介绍给RecyclerView根本使用和增加点击事情。
增加RecyclerView
依赖
implementation 'androidx.recyclerview:recyclerview:1.1.0'
一、RecyclerView根本使用
1. 增加适配器Adapter
class NewsAdapter(private val newsList: List<NewsInfo>, ): RecyclerView.Adapter<NewsAdapter.ViewHolder>() {
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// ViewHolder
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// 绑定数据
}
override fun getItemCount(): Int {
return myList.size
}
}
2. 创立列表的每个项的item_layout.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:text="title"
android:textSize="16sp"
android:textColor="#000000" />
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="200dp" />
<View
android:layout_width="match_parent"
android:layout_height="0.1dp"
android:layout_marginTop="10dp"
android:background="#d3d3d3" />
</LinearLayout>
3. 在activity中使用
// 设置LayoutManager,这里选用LinearLayoutManager线性布局作为示例
recyclerView.layoutManager = LinearLayoutManager(MyApplication.context)
// 创立适配器
val newsAdapter = NewsAdapter(newsList)
// 设置适配器
recyclerView.adapter = newsAdapter
二、RecyclerView点击事情具体步骤
1. 在RecyclerView对应的Adapter类里面新建接口
//创立OnItemClickListener接口
interface OnItemClickListener {
fun onItemClick(position: Int)
}
2. 在Adapter类里创立setOnItemClickListener方法
//声明一个mItemClickListener接口
private var mOnItemClickListener: OnItemClickListener? = null
//增加setOnItemClickListener方法
fun setOnItemClickListener(listener: OnItemClickListener?) {
mOnItemClickListener = listener
}
3. 在Adapter类的onBindViewHolder里给每个item设置回调
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
......
//给每个Item的点击事情设置回调
holder.itemView.setOnClickListener {
mOnItemClickListener?.onItemClick(position)
}
}
4. 在RecyclerView对应的Activity里增加点击事情
val adapter = YourAdapter(YourData) //适配器
adapter.setOnItemClickListener(object : YourAdapter.OnItemClickListener {
override fun onItemClick(position: Int) {
Toast.makeText(this@YourActivity, "You clicked No.${position} item.", Toast.LENGTH_SHORT).show()
}
})
总结
-
在
RecyclerView
对应的Adapter
类里面新建接口 -
在
Adapter
类里创立setOnItemClickListener
方法 -
在
Adapter
类的onBindViewHolder
里给每个item
设置回调 -
在
RecyclerView
对应的Activity
里增加点击事情