当前位置:网站首页>7.如何给RecyclerView添加Click和LongClick事件
7.如何给RecyclerView添加Click和LongClick事件
2022-08-02 14:05:00 【爱上学习啊】
/** * 作者: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;
}边栏推荐
猜你喜欢

MySQL知识总结 (一) 数据类型

verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第九章)
![[ROS] (05) ROS Communication - Node, Nodes & Master](/img/f5/c541259b69a0db3dc15a61e87f0415.png)
[ROS] (05) ROS Communication - Node, Nodes & Master
![[VCU] Detailed S19 file (S-record)](/img/00/ccff024d919398230f9b876c60acf6.png)
[VCU] Detailed S19 file (S-record)

c语言用scanf出错不安全的解决办法

C语言日记 7 输入/输出格式控制

Visual Studio配置OpenCV之后,提示:#include<opencv2/opencv.hpp>无法打开源文件

St. Regis Takeaway Notes - Lecture 10 Swagger

【c】小游戏---扫雷雏形

【c】小游戏---五子棋之井字棋雏形
随机推荐
MySQL知识总结 (九) 用户与用户权限管理
Web Design (Beginners) [easy to understand]
ng-style:动态控制样式
C语言一级指针(补)
Camera Hal(Hal3)层修改Preview流
C语言——一级指针初识
存储系统Cache(知识点+例题)
Flask framework
uniapp小程序禁止遮罩弹窗下的页面滚动的完美解决办法
加减法运算及其溢出处理
redis基础
统计偏科最严重的前100名学生
Scala学习总结
ThinkPHP5.0内置分页函数Paginate无法获取POST页数问题的解决办法
Flink前期代码结构
Kubernetes核心概念
C语言初级—常见问题(100~200素数,计算1+11+111+...,从键盘获取一个数并输出有几个位)
标签加id 和 加号 两个文本框 和一个var 赋值
mysql
函数递归和动态内存初识