当前位置:网站首页>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;
}边栏推荐
猜你喜欢
随机推荐
The specific operation process of cloud GPU (Hengyuan cloud) training
What's wrong with running yolov5 (1) p, r, map are all 0
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第七章)
mysql常用函数
字符串的小知识
存储系统Cache(知识点+例题)
Tornado framework routing system introduction and (IOloop.current().start()) start source code analysis
Camera Hal(Hal3)层修改Preview流
宏定义问题记录day2
Unit 13 Mixing in View Base Classes
MongoDB Compass 安装与使用
华为防火墙
C语言待解决
The language of initial
Steps to connect the virtual machine with xshell_establish a network connection between the host and the vm virtual machine
十分钟带你入门Nodejs
Kubernetes核心概念
二级指针,数组指针,指针数组和函数指针
利用c语言实现对键盘输入的一串字符的各类字符的计数
VS Code远程开发及免密配置





![[ROS] (05) ROS Communication - Node, Nodes & Master](/img/f5/c541259b69a0db3dc15a61e87f0415.png)

![[ROS] (02) Create & compile ROS package Package](/img/c2/5931d5cbade509c6ca34d66a274756.png)

