Android中实现RecyclerView,并对item及其多个子控件的点击事件监听

目录

背景

实现RecyclerView

第一步、 新建item的xml

第二步、在activity的布局中引入 RecyclerView

第三步、新建一个adapter 

 第四步、在activity中初始化绑定adapter即可

实现item及其多个子组件点击事件监听

第一步、 适配器中创建监听对象

第二步、适配器中绑定监听item和子组件

第三点、在activity中实现方法


背景

如下图所示,在对RecyclerView中item及其多个子组件都需要不同的点击事件监听处理,需要使用到adapter的OnItemClickListener和OnItemChildClickListener两个对象。

实现RecyclerView

第一步、 新建item的xml

新建一个xml文件(black_item.xml)作为单个item的样式,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"><androidx.appcompat.widget.LinearLayoutCompatandroid:id="@+id/lc_content"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:gravity="center_vertical"android:layout_gravity="center_vertical"android:layout_marginLeft="5dp"tools:ignore="MissingConstraints"><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/black_item_ip"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18sp"android:textStyle="bold"android:text="180.123.121.118"/><ImageViewandroid:id="@+id/iv_copy_ip"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:src="@drawable/baseline_content_copy_24"/><TextViewandroid:id="@+id/black_item_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="right"android:textSize="12sp"android:textColor="@color/notice_item_time"android:text="2023-11-06 12:10:11"/></androidx.appcompat.widget.LinearLayoutCompat><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_width="match_parent"android:layout_height="wrap_content"><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:id="@+id/black_item_address"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="2dp"android:textSize="15sp"android:text="中国-广东省-深圳市"/><TextViewandroid:id="@+id/black_item_note"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="2dp"android:layout_marginBottom="2dp"android:textSize="12sp"android:textColor="@color/notice_item_time"android:text="备注:"/></androidx.appcompat.widget.LinearLayoutCompat><Buttonandroid:id="@+id/btn_black_del"android:layout_width="wrap_content"android:layout_height="30sp"android:background="@drawable/btn_black_del"android:layout_gravity="center_vertical"android:textColor="@color/white"android:text="删除"/></androidx.appcompat.widget.LinearLayoutCompat></androidx.appcompat.widget.LinearLayoutCompat></androidx.appcompat.widget.LinearLayoutCompat>

 样式效果如下图:

第二步、在activity的布局中引入 RecyclerView

<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_black"tools:listitem="@layout/black_item"android:layout_width="match_parent"android:layout_height="match_parent" />

第三步、新建一个adapter 

用于相应数据和功能配置,代码如下:

public class BlackRVAdapter extends RecyclerView.Adapter<BlackRVAdapter.MyHolder> {private List<BlackItem> myBlackList = new ArrayList<>();public void setListData (List<BlackItem> list) {this.myBlackList = list;notifyDataSetChanged(); // 刷新}@NonNull@Overridepublic MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {// 加载布局View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.black_item, parent, false);MyHolder myHolder = new MyHolder(view);return myHolder;}@Overridepublic void onBindViewHolder(@NonNull MyHolder holder, @SuppressLint("RecyclerView") int position) {// 绑定数据BlackItem BlackItem = myBlackList.get(position);// 修改item样式holder.black_address.setText(BlackItem.getIp_address());holder.black_note.setText("备注:" + BlackItem.getNote());holder.black_time.setText(BlackItem.getCreated_time());holder.black_ip.setText(BlackItem.getIp());}@Overridepublic int getItemCount() {return myBlackList.size();}static class MyHolder extends RecyclerView.ViewHolder {TextView black_address;TextView black_note;TextView black_time;TextView black_ip;ImageView iv_copy_ip;Button btn_black_del;public MyHolder(@NonNull View itemView) {super(itemView);black_time = itemView.findViewById(R.id.black_item_time);black_ip = itemView.findViewById(R.id.black_item_ip);black_address = itemView.findViewById(R.id.black_item_address);black_note = itemView.findViewById(R.id.black_item_note);iv_copy_ip = itemView.findViewById(R.id.iv_copy_ip);btn_black_del = itemView.findViewById(R.id.btn_black_del);}}
}

 第四步、在activity中初始化绑定adapter即可

public class IpBlackListActivity extends AppCompatActivity {private RecyclerView blackRecyclerView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ip_black_list);initView();}private void initView () {blackRecyclerView = findViewById(R.id.rv_black);// 绑定适配器blackRVAdapter = new BlackRVAdapter();blackRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));blackRecyclerView.setAdapter(blackRVAdapter);blackRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL)); // 添加下划线}
}

实现item及其多个子组件点击事件监听

第一步、 适配器中创建监听对象

public class BlackRVAdapter extends RecyclerView.Adapter<BlackRVAdapter.MyHolder> {private static OnItemChildClickListener onItemChildClickListener;private static OnItemClickListener onItemClickListener;public interface OnItemChildClickListener {/*** 子组件点击事件* @param view* @param position* @param type 子组件类型,用于判断是哪个子组件*/void onItemChildClick(View view, int position, String type);}public void setOnItemClickListener(OnItemChildClickListener listenser) {onItemChildClickListener = listenser;}public interface OnItemClickListener {void onItemClick(int position);}public void setOnItemClickListener(OnItemClickListener listenser) {onItemClickListener = listenser;}}

第二步、适配器中绑定监听item和子组件

public class BlackRVAdapter extends RecyclerView.Adapter<BlackRVAdapter.MyHolder> {private static OnItemChildClickListener onItemChildClickListener;private static OnItemClickListener onItemClickListener;static class MyHolder extends RecyclerView.ViewHolder {public MyHolder(@NonNull View itemView) {super(itemView);// 绑定子控件iv_copy_ip = itemView.findViewById(R.id.iv_copy_ip);btn_black_del = itemView.findViewById(R.id.btn_black_del);// 子控件1btn_black_del.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (onItemChildClickListener != null) {onItemChildClickListener.onItemChildClick(view, getAdapterPosition(), "chil_1");}}});// 子控件2iv_copy_ip.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (onItemChildClickListener != null) {onItemChildClickListener.onItemChildClick(view, getAdapterPosition(), "chil_2");}}});// item点击监听itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (onItemClickListener != null) {onItemClickListener.onItemClick(getAdapterPosition());}}});}}public interface OnItemChildClickListener {/*** 子组件点击事件* @param view* @param position* @param type 子组件类型,用于判断是哪个子组件*/void onItemChildClick(View view, int position, String type);}public void setOnItemClickListener(OnItemChildClickListener listenser) {onItemChildClickListener = listenser;}public interface OnItemClickListener {void onItemClick(int position);}public void setOnItemClickListener(OnItemClickListener listenser) {onItemClickListener = listenser;}}

第三点、在activity中实现方法

public class IpBlackListActivity extends AppCompatActivity {private RecyclerView blackRecyclerView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ip_black_list);initView();}private void initView () {blackRecyclerView = findViewById(R.id.rv_black);// 绑定适配器blackRVAdapter = new BlackRVAdapter();blackRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));blackRecyclerView.setAdapter(blackRVAdapter);blackRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL)); // 添加下划线// 子组件点击事件blackRVAdapter.setOnItemClickListener(new BlackRVAdapter.OnItemChildClickListener() {@Overridepublic void onItemChildClick(View view, int position, String type) {if (type.equals("chil_1")) {// 子组件1点击后执行...} else if (type.equals("chil_2") {// 子组件2点击后执行...}}}// item点击事件blackRVAdapter.setOnItemClickListener(new BlackRVAdapter.OnItemClickListener() {@Overridepublic void onItemClick(int position) {// item点击后执行...                }});}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp ios 授权弹窗 uniapp弹出框怎么实现

新版本的信息弹窗组件 可以弹出很多条信息&#xff0c;并单独控制消失时间、点击消失。 用循环来生成很多个弹窗&#xff0c;用this.$refs来传值&#xff0c;并添加数组。 1.布局 2.js 具体流程。需要一个弹窗&#xff0c;基本信息传入组件&#xff0c;处理后添加入数组&am…

智能优化算法应用:基于闪电搜索算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于闪电搜索算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于闪电搜索算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.闪电搜索算法4.实验参数设定5.算法结果6.参考…

【C++】异常处理 ① ( 异常概念引入 | 抛出异常语法 | 捕获异常语法 | 异常捕获流程 | 异常处理代码示例 )

文章目录 一、异常处理1、异常概念引入2、抛出异常语法3、捕获异常语法4、异常捕获流程 二、异常处理代码示例1、错误代码示例 - 抛出异常 / 不捕获异常2、正确代码示例 - 抛出异常 / 捕获异常3、正确代码示例 - 抛出异常 / 捕获异常不处理继续抛出异常 一、异常处理 1、异常概…

接口测试入门8问(含答案+文档)

Q1&#xff1a;什么是接口测试&#xff0c;基础知识什么的讲讲吧&#xff01; A&#xff1a;你好&#xff0c;接口可以分下面几种 1、系统与系统之间的调用&#xff0c;比如银行会提供接口供电子商务网站调用&#xff0c;或者说&#xff0c;支付宝会提供接口给淘宝调用 2、上…

Table和HashBasedTable的使用案例

------------------- 1.普通使用 package org.example.testhashbasedtable;import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table;import java.util.Map;public class TestHashBasedTable {public static void main(String[] args) {Ta…

【方法】PowerPoint如何删除“限制编辑”?

如果PPT文件设置成“只读模式”&#xff0c;就会被限制编辑&#xff0c;也就是无法对PPT进行编辑或更改&#xff0c;那要如何删除这个“限制”呢&#xff1f; 下面小编会按照“无密码的只读方式”、“有密码的只读方式”以及“忘记了密码的只读方式”这3种情况&#xff0c;来说…

enote笔记法之附录2——5w1h2k关联词(ver0.22)

enote笔记法之附录2——5w1h2k关联词&#xff08;ver0.22&#xff09; 最上面的是截屏的完整版&#xff0c;分割线下面的是纯文字版本&#xff1a; 作者姓名&#xff08;本人的真实姓名&#xff09;&#xff1a;胡佳吉 居住地&#xff1a;上海 作者网名&#xff1a;EverSt…

【从删库到跑路 | MySQL总结篇】表的增删查改(进阶下)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、联合…

【接口技术】实验3:可编程并行接口8255

实验3 可编程并行接口8255实验 一、实验目的 1&#xff1a;了解8255芯片结构及编程方法。 2&#xff1a;了解8255输入/输出实验方法。 3&#xff1a;掌握8255控制键盘及显示电路的基本功能及编程方法。 4&#xff1a;掌握一般键盘和显示电路的工作原理。 二、实验内容 1&…

WS2812灯条基于WLED开源项目无门槛使用简介

WS2812灯条基于WLED开源项目无门槛使用简介 &#x1f4cc;项目github地址&#xff1a;https://github.com/Aircoookie/WLED&#x1f4cd;WLED详情地址&#xff1a;https://kno.wled.ge/&#x1f388;网页在线烧录固件地址&#xff1a;https://install.wled.me/ ✨ 仅作为使用的…

安全技术与防火墙

目录 一、安全技术 1、安全技术 2、防火墙的分类 二、netfilter 1、netfilter简述 2、防火墙工具 1.iptables工具 2.netfilter的四表五链 3.内核中数据包的传输过程 4.三种报文流向 5.实操 总结&#xff1a;本章主要介绍了安全技术与防火墙 一、安全技术 1、安全技…

解决Unable to preventDefault inside passive event listener invocation.报错

报错信息&#xff1a; 这个报错大致说的是&#xff1a;无法在被动事件侦听器调用中防止Default 查了其他博主的解决办法&#xff1a;比如&#xff1a; 1、声明事件监听的时候设置为主动事件监听&#xff1a; window.addEventListener(‘touchmove’, handler, { passive: fal…

【软件测试学习】—软件测试模型(二)

【软件测试学习】—软件测试模型&#xff08;二&#xff09; 我 | 在这里 &#x1f469;‍&#x1f9b0;&#x1f469;‍&#x1f9b0; 读书 | 长沙 ⭐计算机科学与技术 ⭐ 本科 【2024届】 &#x1f383;&#x1f383; 爱好 | 旅游、跑步、网易云、美食、摄影 &#x1f396;️…

VR特警野外武装仿真虚拟训练实操教学保证训练效果

特警VR模拟仿真训练软件的优势主要体现在以下几个方面&#xff1a; 真实感和沉浸感&#xff1a;通过VR技术&#xff0c;特警可以在虚拟环境中体验真实的训练场景&#xff0c;如人质解救、反恐行动等。这种真实感和沉浸感可以帮助特警更好地理解和适应实际情况&#xff0c;提高训…

GoLang切片

一、切片基础 1、切片的定义 切片&#xff08;Slice&#xff09;是一个拥有相同类型元素的可变长度的序列它是基于数组类型做的一层封装它非常灵活&#xff0c;支持自动扩容切片是一个引用类型&#xff0c;它的内部结构包含地址、长度和容量声明切片类型的基本语法如下&#…

阿里巴巴矢量图标库的使用

iconfont-阿里巴巴矢量图标库iconfont-国内功能很强大且图标内容很丰富的矢量图标库&#xff0c;提供矢量图标下载、在线存储、格式转换等功能。阿里巴巴体验团队倾力打造&#xff0c;设计和前端开发的便捷工具https://www.iconfont.cn/ 今天来介绍一下阿里巴巴矢量图标库的使用…

【人工智能Ⅰ】实验2:遗传算法

实验2 遗传算法实验 一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略&#xff0c;理解求解TSP问题的流程并测试主要参数对结果的影响&#xff0c;掌握遗传算法的基本实现方法。 二、实验原理 旅行商问题&#xff0c;即TSP问题&#xff08;Traveling Salesman Proble…

2023最新的软件测试热点面试题(答案+解析)

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

基于Qt QChart和QChartView实现正弦、余弦、正切图表

# 源码地址 https://gitcode.com/m0_45463480/QChartView/tree/main# .pro QT += charts​​HEADERS += \ chart.h \ chartview.h​​SOURCES += \ main.cpp \ chart.cpp \ chartview.cpp​​target.path = $$[QT_INSTALL_EXAMPLES]/charts/zoomlinechartINSTAL…

借助 DPM 代码扫描的力量解锁医疗设备的可追溯性

在当今的医疗保健系统中&#xff0c;医疗设备的可追溯性变得比以往任何时候都更加重要。为了增强现代医疗保健领域的可追溯性和安全性&#xff0c;UDI 条形码充当唯一设备标识的标准&#xff0c;为医疗设备提供唯一标识符。 DataMatrix 代码&#xff08;或直接零件标记代码&am…