recyclerview早就不陌生了,比起过去传统的listView,样式更多,也较为高效一点,这里整理一下recylerview中item的点击事件。

recyclerview和listView不同的地方,在于RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件,那么要想实现点击或是长按事件,就需要开发者自己来实现。

这里实现的方式也是网上大部分的实现方式,很方便:在ViewHolder中实现点击监听,而具体的点击处理事件有Adapter在绑定viewholder时传入,同时,在Adapter中暴露方法,可以在使用Adapter的地方,传入实例化的点击事件。这样,就需要新建一个借口,所有自定义的点击事件都继承该借口。具体流程如下:

(不擅于画图,凑合看吧)

那么具体的实现如下:

1、定义接口:

public interface MyItemOnClickListener {
public void onItemOnClick(View view,int postion);
}

在接口中,定义接口方法onItemOnClick方法,在里面实现具体的点击响应事件,同时传入两个参数:view和postion。和ListView中item的点击一样。

2、在ViewHolder中实现单击监听:

 class FMListHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        TextView textView;

        MyItemOnClickListener mListener;
public FMListHolder(View itemView,MyItemOnClickListener myItemOnClickListener) {
super(itemView);
textView= (TextView) itemView.findViewById(R.id.id_item_text);
this.mListener=myItemOnClickListener; itemView.setOnClickListener(this);
} @Override
public void onClick(View view) {
if(mListener!=null){
mListener.onItemOnClick(view,getPosition());
}
}
}

上面的代码就是ViewHolder,在itemView或是里面包含的子View实现setOnClickListener,在OnClick中接受接口实例化传入的具体处理事件,即mListener。在这里也能看的出来,只有viewholder中可以实现点击监听。

3、在Adapter中绑定ViewHolder时传入接口实例化后的类

@Override
public FMListAdapter.FMListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
FMListHolder fmListHolder=
new FMListHolder(LayoutInflater.from(mContext).inflate(R.layout.item_fm_list,parent,false)
,mMyItemOnClickListener);
return fmListHolder;
}

看的出,在新建ViewHoler的过程中,传入了参数 mMyItemOnClickListener,该参数肯定在实现Adapter的地方传入Adapter中,所以要在Adapter中对外暴露方法:

public void setItemOnClickListener(MyItemOnClickListener listener){
mMyItemOnClickListener=listener;
}

4、在实现Adapter的地方实现具体点击事件

mAdapter.setItemOnClickListener(new MyItemOnClickListener() {
@Override
public void onItemOnClick(View view, int postion) {
Log.e(TAG,postion+"");
}
});

其实就是在使用RecyerView的地方,调用Adapter暴露的方法,将MyItemOnClickListener实例化话,并在方法onItemOnClick中实现事件,这里只是打印Log。

这个博客很基础,就不粘贴全部的代码了。不懂的可以留言给我。


不是闷骚的程序员算不上程序员。我的微信公众号“那点鼻事”,在这里周一到周五每天一篇文章,与技术无关,只哈牛逼。

recyclerview item点击事件的更多相关文章

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

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

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

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

  3. RecyclerView的点击事件添加-------接口回调的形式添加

    package com.example.recyclerviewdemo; import android.support.v7.widget.RecyclerView; import android. ...

  4. RecyclerView的点击事件

    RecyclerView 一.简单介绍 这个是谷歌官方出的控件.使我们能够很easy的做出列表装的一个控件,当然recyclerview的功能不止这些,它还能够做出瀑布流的效果,这是一个很强大的控件, ...

  5. android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)

    1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为        2,为了使LISTVIEW的ITEM在点 ...

  6. ListView的Item点击事件(消息传递)

    转载请保留原文出处“http://my.oschina.net/gluoyer/blog”,谢谢! 您可以到博客的“友情链接”中,“程序猿媛(最新下载)*.*”下载最新版本,持续更新!当前版本,也可直 ...

  7. Android ListView中Item点击事件失效解决方案

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...

  8. Android ListView item 点击事件失效问题的解决

    关于ListView点击无效,item无法相应点击事件的问题,网上有很多, 大致可分为俩种情况, 一种是 item中存在 ImageButton 等可以点击的组件,这会抢先获得ListView的焦点. ...

  9. android 开发 写一个RecyclerView布局的聊天室,并且添加RecyclerView的点击事件

    实现思维顺序: 1.首先我们需要准备2张.9的png图片(一张图片为左边聊天泡泡,一个图片为右边的聊天泡泡),可以使用draw9patch.bat工具制作,任何图片导入到drawable中. 2.需要 ...

随机推荐

  1. 职业定位(移动端、ios开发、Android开发)

    移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...

  2. Storm学习笔记六

    1 Storm的通信机制 说明:1.worker与worker之间跨进程通信: 2.worker内部中各个executor间的通信,Task对象--->输入队列queue--->执行--- ...

  3. Android组件生命周期(一)

    引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  4. MySQL动态添删改列字段

    动态增加列字段: ); 动态删除列字段: alter table TableName drop column field_id; 动态修改列字段: alter table TableName chan ...

  5. 建立、配置和使用Activity——使用Bundle在Activity之间交换数据

    当一个Activity启动另一个Activity时,常常会有一些数据需要传过去——这就像Web应用从一个Servlet跳到另一个Serlvet时,Web应用习惯把需要交换的数据放入requestSco ...

  6. swift 画图 Charts的基本使用

    下面的这些代码呢是在oc工程里里使用的 其实和在swift中使用没什么大的差别 属性都一样的 //创建饼状图    self.pieChartView = [[PieChartView alloc] ...

  7. spring mvc controller中获取request head内容

    spring mvc controller中获取request head内容: @RequestMapping("/{mlid}/{ptn}/{name}") public Str ...

  8. Pomelo术语解释

    gate服务器 一个应用的gate服务器,一般不参与rpc调用,也就是说其配置项里可以没有port字段,仅仅有clientPort字段,它的作用是做前端的负载均衡.客户端往往首先向gate服务器发出请 ...

  9. [TPYBoard-Micropython之会python就能做硬件 2] 利用micropython控制NOKIA 5110屏

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板  一块 2.DS3231 ...

  10. 数据挖掘学习笔记--AdaBoost算法(一)

    声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢- 背景: AdaBoost算法,这个算法思路简单,但是论文真是各种晦涩啊-,以下是自己看了A Short Introd ...