Android RecyclerView添加点击事件
leekey 人气:0引言
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
里添加点击事件
加载全部内容