Android开发使用RecyclerView添加点击事件实例详解

作者:leekey 时间:2022-04-30 14:11:55 

引言

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里添加点击事件

来源:https://juejin.cn/post/7134989573238554638

标签:Android,RecyclerView,点击事件
0
投稿

猜你喜欢

  • 完美解决springboot中使用mybatis字段不能进行自动映射的问题

    2023-07-27 00:41:35
  • 简单讲解Java设计模式编程中的单一职责原则

    2022-05-02 03:09:24
  • AQS加锁机制Synchronized相似点详解

    2023-08-04 22:36:55
  • Struts2拦截器 关于解决登录的问题

    2023-07-02 14:06:09
  • springboot中项目启动时实现初始化方法加载参数

    2023-08-31 06:00:40
  • MyBatis-Plus 如何单元测试的实现

    2022-03-02 19:45:08
  • 解决IDEA service层跳转实现类的快捷图标消失问题

    2022-09-03 06:38:00
  • Spring事务管理方法步骤解析

    2021-12-15 20:09:04
  • C# Winform下载文件并显示进度条的实现代码

    2022-11-26 04:39:02
  • 详解JAVA中的OPTIONAL

    2022-08-22 17:09:04
  • 详解Spring-bean的循环依赖以及解决方式

    2023-08-18 18:30:38
  • 详解java中jvm虚拟机栈的作用

    2022-06-06 14:08:44
  • Java实例讲解动态代理

    2023-03-21 22:56:45
  • Java中使用Lambda表达式和函数编程示例

    2022-05-06 03:30:40
  • 深入理解Java设计模式之代理模式

    2022-01-14 07:42:00
  • Spring Boot 实现配置文件加解密原理

    2023-11-23 17:48:46
  • spring boot微服务场景下apollo加载过程解析

    2022-05-20 13:55:32
  • Java8内存模型PermGen Metaspace实例解析

    2023-11-25 10:53:36
  • Java中的泛型方法详解及简单实例

    2023-09-11 13:28:05
  • C# 数独求解算法的实现

    2022-04-04 18:48:57
  • asp之家 软件编程 m.aspxhome.com