RecyclerView不像ListView,可以直接写setOnItemClickListener,我们大部分都是在Adapter中的设置点击事件,这个是使用RecyclerView的addOnItemTouchListener方法,利用手势监听器实现条目点击事件;

public class VpRecyView extends RecyclerView{

    public VpRecyView(Context context) {
super(context);
init();
} public VpRecyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
} private void init() {
this.addOnItemTouchListener(new RecyclerItemClickListener(this.getContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if (onpagerClickListener != null) onpagerClickListener.onPagerClick(view,position);
} @Override
public void onLongClick(View view, int posotion) {
if (onpagerLongClickListener != null) onpagerLongClickListener.onPagerLongClick(view,posotion);
}
}));
} interface onPagerClickListener{
void onPagerClick(View view,int position);
}
private onPagerClickListener onpagerClickListener;
public void setOnPagerClickListener(onPagerClickListener onpagerClickListener){
this.onpagerClickListener = onpagerClickListener;
} interface onPagerLongClickListener{
void onPagerLongClick(View view,int position);
}
private onPagerLongClickListener onpagerLongClickListener;
public void setOnPagerLongClickListener(onPagerLongClickListener onpagerLongClickListener){
this.onpagerLongClickListener = onpagerLongClickListener;
}
}
RecyclerItemClickListener:这个类使用GestureDetector实现点击、双击、长按等的监听;
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private GestureDetector mGestureDetector;
private View childView;
private RecyclerView touchView; public RecyclerItemClickListener(Context context, final OnItemClickListener mListener) {
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent ev) {
if (childView != null && mListener != null) {
mListener.onItemClick(childView, touchView.getChildPosition(childView));
}
return true;
} @Override
public void onLongPress(MotionEvent ev) {
if (childView != null && mListener != null) {
mListener.onLongClick(childView, touchView.getChildPosition(childView));
}
}
});
} public interface OnItemClickListener {
void onItemClick(View view, int position); void onLongClick(View view, int posotion);
} @Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
mGestureDetector.onTouchEvent(e);
childView = rv.findChildViewUnder(e.getX(), e.getY());
touchView = rv;
return false;
} @Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) { } @Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { }
}

这样就能和ListView的条目点击事件一样使用了,不需要写在Adapter中; 我是从其它代码块中抽取出来的,还可以再简化;

   rv.setOnPagerClickListener(new VpRecyView.onPagerClickListener() {
@Override
public void onPagerClick(View view, int position) {
Log.i(TAG, "onPagerClick: "+datas1.get(position));
}
});

在Adapter中如何实现条目点击事件,这个就比较简单了;在BaseAdapter中写一个接口监听就行了;

interface OnItemClickListener {
void onItemClick(View view, int position);
}
private OnItemClickListener mOnItemClickListener;
public RecyclerAdapter setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener = listener;
return this;
}
 if (null != mOnItemClickListener) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onItemClick(v, holder.getAdapterPosition());
}
});
}

RecyclerView添加条目点击事件setOnItemClickListener,不是在Adapter中设置;的更多相关文章

  1. Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件

    1. 引言: RecyclerView侧重的是布局的灵活性,虽说可以替代ListView但是连基本的点击事件都没有,这篇文章就来详细讲解如何为RecyclerView的item添加点击事件,顺便复习一 ...

  2. 从源码角度入手实现RecyclerView的Item点击事件

    RecyclerView 作为 ListView 和 GridView 的替代产物,相信在Android界已广为流传. RecyclerView 本是不会有类似 ListView 的那种点击事件,但是 ...

  3. 后台找到repeater里面的div并添加客户端点击事件

    public partial class Inv_SelectWorkservice : System.Web.UI.Page,IPostBackEventHandler{ } 通过OnItemCre ...

  4. 【读书笔记】iOS-storyBoard-为一个按钮添加一个点击事件

    按照故事板的用语,应用中的一个界面屏幕被称作一个”场景(Scene)",以后添加额外的场景时,停靠区中将有另一个部分. 一,新建立一个工程,如图所示. 二,选中Main.storyboard ...

  5. Echarts如何添加鼠标点击事件?防止重复触发点击事件

    Echarts如何添加鼠标点击事件? 1.通常我们只使用了以下代码,通过配置项和数据显示图表. var myChart = echarts.init(document.getElementById(' ...

  6. jQuery添加options点击事件并传值

    说明: 根据选择不同店铺选项,上送不同id值,展示不同商品列表   var formStr = "{'supplierId':'供应链企业|%-jm-sprt-%|93794498-3'}& ...

  7. react添加右键点击事件

    1.在HTML里面支持contextmenu事件(右键事件).所以需要在组建加载完时添加此事件,销毁组建时移除此事件. 2. 需要增加一个state,名称为visible,用来控制菜单是否显示.在_h ...

  8. 给ECharts添加右键点击事件,实现右键功能菜单

    由于项目的需要,使用ECharts 的力导向图来实现 整个EDW数据架构的血缘分析,由于ECharts并没有给组件定义有右键的事件,同时ECharts是开源的项目,所以研究了下源码,将ECharts2 ...

  9. ListView中itemz中控件的点击事件和条目点击事件冲突

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

随机推荐

  1. Linux+eclipse+maven+tomcat7小项目实战

    一.准备工作:CentOS6.5安装linux,maven,tomcat7,eclipse 二.在linux中打开eclipse,创建一个maven项目 修改web.xml 打开Navigator视图 ...

  2. [转]java虚拟机工作原理详解

    一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 javac YourClassNam ...

  3. es高级部分

    1 关于机器 配置. 内存:上亿的数据一般需要64G内存的服务器.劲量不要使用小于32G 内存的服务器. cpu:es 对cpu 要求依赖不如内存.一般要求2-8 核就可以了. 磁盘:es 对磁盘依赖 ...

  4. django报错解决:view must be a callable or a list/tuple in the case of include().

    django版本:1.11.15 django应用,修改urls.py后,访问报错:TypeError at /view must be a callable or a list/tuple in t ...

  5. workerman的使用实践--并与solaris通信

    Workerman与solarisTCP通信测试 1.  笔记本win7,tcp_test.php 2.  solaris,test.c 编译命令: gcc test.c –o  test –lsoc ...

  6. locaton.href传参数

    location.href = location.href.substring(0,location.href.lastIndexOf('?'))+'?typeId=' + fid + '&p ...

  7. 实例快速上手UDP和TCP的使用

    TCP和UDP两个协议在Java通信编程中是如何被使用的 UDP协议与TCP协议之间的区别不再分析,主要是分析一下这两个协议在Java通信编程中是如何被使用的.首先介绍TCP,对于TCP,Java语言 ...

  8. 推荐两个小工具MediaInfo 和 netpersec

    [转载请注明出处]:http://blog.csdn.net/longlong530 流媒体服开发的时候常用的两个工具, 1. MediaInfo     下载路径:(http://w.x.baidu ...

  9. nginx 操作笔记

    测试nginx 配置是否成功 service nginx configtest

  10. 《Effective Java》笔记-服务提供者框架

    静态工厂方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不必存在.这种灵活的静态工厂方法构成了服务提供者框架(Service Provider Framework)的基础,例如JDBC AP ...