7.如何给RecyclerView添加Click和LongClick事件

Android开发之旅——RecyclerView绑定点击事件和长按点击事件 前提:ListView可以使用setOnItemClickListener给每个item添加点击事件监听器,然后重写onItemClick方法即可实现,每个子项(item)的点击事件。同理,setOnItemLongClickListener实现了长按点击事件。RecyclerView官方没有给可用方法,直接给item绑定点击事件。但这种需要又很常见。我的解决办法是在Adapter中加一个接口监听item点击事件,然后在展示RecyclerView的实现监听接口。描述起来总是乱糟糟,上代码! 阅读详情
/**
 * 作者:Pich
 * 原文链接:http://me.woblog.cn/
 * QQ群:129961195
 * 微信公众号:woblog
 * Github:https://github.com/lifengsofts
 */

详解RecyclerView系列文章目录

概述

如果你做Android开发,那么你肯定听过RecyclerView没有提供Click和LongClick事件的默认实现。不知道官方这是个什么用意,那么这节课程就来实现这个功能,实现完成的效果图如下图所示:

这里我们不讲过分的封装,现在只是随便写,目的就是更容易懂。后面的到封装的课程会讲进一步的封装。

添加OnItemClickListener

public interface OnItemClickListener {

  void onItemClick(ViewHolder holder,int position);
}

添加一个接口,用来在adapter里面点击事件后回调到你需要的位置。

在adapter中实现点击事件

public void onBindViewHolder(final CardViewActivity.MyAdapter.MyViewHolder holder,
    final int position) {
  String d = CardViewActivity.this.data.get(position);
  holder.bindData(d, position);
  if (onItemClickListener != null) {
    holder.itemView.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        onItemClickListener.onItemClick(holder,position);
      }
    });

  }
}

这里我们先判断onItemClickListener是否为空,然后在设置点击事假,这样比一上来就设置点击监听器,然后再点击事件里面在判断监听器是否为空更节省资源。

处理点击事件

接下来就可以在回调的方法里面处理点击事件了。

String s = data.get(position);
Intent intent = new Intent(this, NewsDetailActivity.class);
intent.putExtra(NewsDetailActivity.URL, s);
startActivity(intent, options.toBundle());

长按事件也就很简单了,可以直接改上面的监听器,在添加一个方法,也可以在创建一个接口,我们这里再创建一个接口。

创建OnItemLongClickListener

public interface OnItemLongClickListener {
  boolean onItemLongClick(ViewHolder holder,int position);
}

特别注意的是我们在回调中传入了ViewHolder,这样的好处是,我们在点击事件里面就可以拿到相应的view,可以直接执行一些动画,不用再次拿到View在findViewById了。

处理长按事件

这个没必要多说了,大家基本都会,但是要注意的是onItemLongClick有返回值,他根据返回时判断是否在调用OnItemClick,所以这个地方一定要根据实际情况返回不同的值。

@Override
public boolean onItemLongClick(ViewHolder holder, int position) {
  Toast.makeText(this, "Long Click", Toast.LENGTH_SHORT).show();
  return true;
}
RecyclerViewEvent,RecyclerView OnEmClick、OnEmLongClick、拖动、滑动、分隔符RecyclerView:.zip 特技镜头 立即下载

相关推荐

神经网络学习笔记-波尔兹曼(Boltzmann)机

Boltzmann机是一种反馈随机神经网络 两种输出状态,单极性0或1。输出状态的取值根据概率统计法则决定,这种概率统计法则类似Boltzmann分布,部分反馈 它在神经元状态变化中引入了统计概率,网络的平衡状态服从Boltzmann分布,网络运行机制基于模拟退火算法。 离散Hopfield神经网络+模拟退火+隐单元=Boltzman机 DHNN全反馈,转移函数:符号函数 BM机网络拓扑...

求易学堂的博客 2613

Android中RecyclerView的长按

案例:点击跳转页面,长按弹窗,点击删除。 一、步骤 (1)在Adapter中写一个item的点击事件接口,Adapter中设置该接口,并给其一个set方法 (2)Adapter类实现 View.OnClickListener, View.OnLongClickListener接口,并实现其方法 (3)实现接口的方法中,回调item的点击事件接口 (4)在Activity中调用方法 二、...

Jasmyn飞飞飞的博客 1435

道闸不自动落杆故障排查:从传感器原理到控制器调试全解析

在工业自动化和物联网系统中,传感器与控制器构成的闭环控制是保障设备可靠运行的核心。其基本原理是通过传感器采集环境状态,控制器依据预设逻辑做出决策并驱动执行器动作。这一技术价值在于实现了无人值守下的安全、高效自动化,广泛应用于智能交通、安防和智能楼宇等领域。以停车场道闸系统为例,其自动落杆功能高度依赖地感线圈与防砸雷达的协同。地感线圈作为触发单元,负责感知车辆接近;而防砸雷达则作为持续监测的安全单元,通过微波探测防砸区域内是否有障碍物,其信号是控制器执行落杆决策的关键依据。当系统出现车辆通过后闸杆不落的典型故

weixin_29190651的博客 311

Android零基础入门第66节:RecyclerView点击事件处理

RecyclerView没有实现一些控制点击、长压的事件,那么本期一起来学会自己完成。

鑫鱻的博客 1792

飞书文档API深度使用指南:如何用n8n社区节点绕过HTTP Request的复杂配置

本文详细解析了如何利用n8n社区节点简化飞书文档API的集成过程,绕过复杂的HTTP Request配置。通过n8n-feishu-lite社区节点,开发者可以轻松实现飞书文档的创建、编辑和查询操作,大幅提升自动化工作流的效率。文章还提供了高级应用场景和性能优化建议,帮助开发者更好地利用飞书开放平台的API功能。

weixin_29227585的博客 83

NX二次开发(Python)-UIStyler-选择体和按钮操作

用UG NX的UIStyler块界面编辑器,生成带有“选择体”和“按钮”操作的一个界面,如下图所示:

GimiGimmy 2311

RecyclerView 设置 itemclickListener 和 longclicklintener

预想是在adapter中的 onBindViewHolder 给item的view设置一下就可以的,但发现 adapter更新后  ,view绑定的position没有更新,所以添加了一个getPosition方法获取实际position private int getPosition(View v) { int count = parent.getChildCount(

1247

金融监管压力测试场景生成

压力测试是一种评估金融资产或机构在极端市场条件下的表现和风险承受能力的方法。它通过模拟各种不利的市场情景,测试金融机构在这些情景下的财务状况和运营能力。压力测试的作用在于帮助金融机构识别潜在风险,评估应对策略,并制定应急预案。总结压力测试场景生成系统的开发过程和实现效果,强调其在金融监管中的重要性和应用价值。随着金融市场的发展,实时压力测试将越来越重要。未来,压力测试需要更加注重实时性和动态性,及时反映市场的变化。本文详细介绍了金融监管压力测试的重要性、核心概念、算法原理、系统架构以及实战案例。

AI天才研究院 1208

RecyclerView的使用与添加单击(长按)监听事件

使用   1、添加依赖     无论从IDE设置项目环境中搜索添加依赖还是在Gradle的配置文件中添加均可,是标准的RecyclerView就行     因为没有找到网上所谓的v7支持包中的,个人使用最新androidx合成系列中的RecyclerView implementation ‘and...

WihauShe's Blogger 699

17、激光切割焦点位置和入射角对切割质量的影响研究

本研究通过响应面方法(RSM)结合Box-Behnken设计,系统分析了激光功率、切割速度和气体压力对SS 304不锈钢激光切割质量的影响,重点探讨了三种不同喷嘴在不同聚焦条件下的切缝比和条纹深度变化规律。实验结果表明,激光功率、切割速度和气体压力对切割质量具有显著影响,且不同喷嘴因焦点位置差异表现出不同的响应趋势。通过回归建模与优化,确定了最小激光功率、适中切割速度和最大气体压力为最优参数组合,可实现最小切缝比和较优条纹深度。研究为实际激光切割工艺提供了科学的参数选择依据和操作流程建议,有效提升了切割精度

mm9012的博客 126

【C++】构造函数之初始化列表(Initialization list of constructors)

本讲主要是构造函数的初始化列表的讲节,但是本节很重要,可以关乎后面写项目

m0_62599305的博客 2233

为RecyclerView精确的添加Click及LongClick事件

为RecyclerView添加Clkick&LongClick的增强库。超级赞

Lincoln 的专栏 2065

ROS机器人里程计模型

3.5 移动机器人系统模型 相信大家的机器人平台STM32端底层控制和机器人urdf建模都已经顺利完成了,在正式开始ros端编写机器人启动功能包之前,我们还不得不学习一些必要的理论知识。别担心数学不好,这里基本都是高中数学。下面我们开始,Are you ready? 没准备好也开始了。 3.5.1 常用坐标系系统模型 在移动机器人技术研究中,最为常用的坐标系统是笛卡尔坐标系统。而在SLAM算法研究中,有如下几个比较常见的笛卡尔坐标系统,它们分别为机器人坐标系XR YR OR 、传感器坐标系XS YS OS

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

Android RecyclerView 使用完全解析 体验艺术般的控件

Android RecyclerView 使用完全解析 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridView。 那么有了ListView、GridView为什么还需要RecyclerView这

Hongyang 101万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

RecyclerView之ViewHolder封装实现点击、长按、headerView和多选功能

全面封装RecyclerView的ViewHolder,实现click、longClick和select多选功能。

Dawish的专栏 441

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android RecyclerView 使用完全解析

本文出自:【张鸿洋的博客】 http://blog.csdn.net/lmj623565791/article/details/45059587;

Errol's Blog 272

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RecyclerView使用解析

1.概述 该控件用于在有限的窗口中展示大量数据集,可以实现ListView,GridView的功能,通过导入support-v7对其进行使用。 那么有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoratio

jxf_access的专栏 378

深入解析Android事件分发机制:从原理到滑动冲突实战

在Android应用开发中,UI交互的流畅性直接关系到用户体验,其底层核心是事件分发机制。这一机制基于责任链模式,通过`dispatchTouchEvent`、`onInterceptTouchEvent`和`onTouchEvent`三个核心方法,将用户的触摸事件在View树中层层传递与处理。理解其原理对于实现复杂的自定义控件和优化交互至关重要。在实际工程实践中,嵌套滑动场景下的滑动冲突是常见挑战,开发者需要掌握根据滑动距离与方向判断拦截时机的技巧,或运用更现代的NestedScrolling接口进行协作

weixin_33860553的博客 416

Hippy hippy-vue 核心组件 API 详解:div、ul、input、img 等标签到原生组件的映射、属性、事件与方法全解

本文基于 Hippy 官方文档中的 hippy-vue「核心组件」章节,系统讲解 hippy-vue 中与浏览器、Vue 保持一致的一组核心组件(`a`、`button`、`div`、`form`、`iframe`、`img`、`input`、`label`、`li`、`p`、`span`、`textarea`、`ul`)的完整参数、事件与方法 API,并结合仓库中 `driver/js/pack

gitblog_00840的博客 411

Auto.js控件操作全解析:从选择器到实战脚本的自动化基石

在移动自动化领域,UI自动化是核心技术之一,其核心原理是通过程序模拟用户操作,与应用程序界面进行交互。这项技术的核心价值在于将重复、繁琐的人工操作转化为高效、准确的自动化流程,广泛应用于自动化测试、任务脚本、数据采集等场景。实现UI自动化的关键在于对界面元素的精准定位与稳定操作,这直接关系到脚本的健壮性与执行效率。本文聚焦于Auto.js这一主流自动化工具,深入剖析其控件操作的核心机制,涵盖选择器编写、控件获取函数应用以及交互方法实践等关键环节,并结合自动化签到等典型应用场景,提供从原理到实战的完整解决方案

weixin_33862993的博客 408

Auto.js控件操作实战:从定位到执行,打造稳定自动化脚本

在移动应用自动化领域,控件操作是实现脚本与界面交互的核心技术。其原理基于对屏幕UI元素的识别与操作,通过模拟用户点击、输入等行为,将重复性任务自动化。这项技术的核心价值在于提升操作效率与准确性,广泛应用于自动化测试、数据采集、批量处理等场景。在Android平台,Auto.js作为主流自动化工具,其控件操作依赖于UiSelector选择器,通过控件的text、id、className等属性进行精准定位。掌握控件的定位、获取与执行这三个关键步骤,是编写稳定可靠脚本的基础。本文聚焦于Auto.js的控件操作实战

weixin_30613727的博客 342

如何快速上手AndroidKTX:面向初学者的完整入门教程

AndroidKTX是一套功能强大的Kotlin扩展库,专为加速Android开发而设计。它通过简化常见任务、减少样板代码和提供直观的API,帮助开发者更高效地构建Android应用。本教程将带你从环境搭建到核心功能使用,快速掌握这个实用工具库。 ## 🚀 认识AndroidKTX:为什么它能加速你的开发? AndroidKTX的核心理念是"用更少的代码做更多的事"。它扩展了Android框

gitblog_00592的博客 1003

Recyclerview的点击和长按事件

首先是在Adapter适配器里 private OnItemClickLitener mOnItemClickLitener; // 定义接口写条目点击事件和长按事件 public interface OnItemClickLitener { //点击事件 void onItemClick(View view, int position); //长按事件

Noviceduderi的博客 537

Android RecyclerView Item点击事件

RecyclerView控件出来后可以代替ListView,功能更强大,但是RecyclerView却没有ListView的setOnItemClickListener和setOnLongClickListener方法,这里仿照ListView实现其Item点击事件;  第一步:RecyclerView为我们提供了OnItemTouchListener监听,所以写一个类实现RecyclerVie

无名的一棵小树 589
上一篇: 更好的Android多线程下载框架
下一篇: 6.如何使用CardView制作卡片布局效果
爱上学习啊
博客等级 码龄16年 99粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值