当前位置:网站首页>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字符编码
MySQL 8.0 新特性
浮点数的运算方法
Error Correction Design Principle of Hamming Check Code
Ehcache基础学习
What's wrong with running yolov5 (1) p, r, map are all 0
mysql常用函数
C语言日记 6 基本输入/输出
标签加id 和 加号 两个文本框 和一个var 赋值
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十一章)
Flink-独立集群/Yarn
Kubernetes核心概念
Creating seven NiuYun Flask project complete and let cloud
STM32 (F407) - stack
Kubernetes介绍
Flask-SQLAlchemy
A little thought about password encryption
PHP open source customer service system _ online customer service source code PHP
Using the cloud GPU + pycharm training model to realize automatic background run programs, save training results, the server automatically power off
spark(standalone,yarn)






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


