RecyclerView 的每个Item的点击事件并没有像 ListView 一样封装在组件中,需要 Item 的单击事件时就需要自己去实现,在 Adapter 中为RecyclerView 添加单击事件参考如下:

RecyclerView的使用方法请参考:RecyclerView的简单使用

第一步:

在 RecyclerView 的 Adapyer 中定义单击事件的回调接口:

/*** 定义 RecyclerView 选项单击事件的回调接口*/
public interface OnItemClickListener{//参数(父组件,当前单击的View,单击的View的位置,数据)void onItemClick(RecyclerView parent,View view, int position, String data);
}

第二步:

在RecyclerView的Adapyer中声明该接口,并提供setter方法:

private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener){this.onItemClickListener = onItemClickListener;
}

第三步:

在RecyclerView的Adapyer类实现View.OnClickListener接口,并重写onClick(View view)方法,然后设置给接口的事件监听:

public class RvAdapter1 extends RecyclerView.Adapter<RvAdapter1.DataViewHolder> implements View.OnClickListener{...view.setOnClickListener(this);//设置监听器...@Overridepublic void onClick(View view) {//根据RecyclerView获得当前View的位置int position = recyclerView.getChildAdapterPosition(view);//程序执行到此,会去执行具体实现的onItemClick()方法if (onItemClickListener!=null){onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position));}}...
}

第四步:

在MainActivity中通过Adapter设置每个Item的单击事件:

adapter.setOnItemClickListener(new RvAdapter1.OnItemClickListener() {@Overridepublic void onItemClick(RecyclerView parent, View view, int position, String data) {Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();}
});

参考代码

Adapter
/*** Created by jzman on 2017/5/13 0013.* RecycleView的Adapter*/
public class RvAdapter1 extends RecyclerView.Adapter<RvAdapter1.DataViewHolder> implements View.OnClickListener{private Context mContext;private RecyclerView recyclerView;private ArrayList<String> mList;public RvAdapter1() {}public RvAdapter1(Context mContext, ArrayList<String> mList) {this.mContext = mContext;this.mList = mList;}/*** 用于创建ViewHolder* @param parent* @param viewType* @return*/@Overridepublic DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(mContext).inflate(R.layout.item,null);view.setOnClickListener(this);//使用代码设置宽高(xml布局设置无效时)view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));DataViewHolder holder = new DataViewHolder(view);return holder;}/*** 绑定数据* @param holder* @param position*/@Overridepublic void onBindViewHolder(DataViewHolder holder, int position) {holder.tv_data.setText(mList.get(position));}/*** 选项总数* @return*/@Overridepublic int getItemCount() {return mList.size();}@Overridepublic void onClick(View view) {//根据RecyclerView获得当前View的位置int position = recyclerView.getChildAdapterPosition(view);//程序执行到此,会去执行具体实现的onItemClick()方法if (onItemClickListener!=null){onItemClickListener.onItemClick(recyclerView,view,position,mList.get(position));}}/*** 创建ViewHolder*/public static class DataViewHolder extends RecyclerView.ViewHolder{TextView tv_data;public DataViewHolder(View itemView) {super(itemView);tv_data = (TextView) itemView.findViewById(R.id.tv_recycle);}}private OnItemClickListener onItemClickListener;public void setOnItemClickListener(OnItemClickListener onItemClickListener){this.onItemClickListener = onItemClickListener;}/*** 定义RecyclerView选项单击事件的回调接口*/public interface OnItemClickListener{//参数(父组件,当前单击的View,单击的View的位置,数据)void onItemClick(RecyclerView parent,View view, int position, String data);}/***   将RecycleView附加到Adapter上*/@Overridepublic void onAttachedToRecyclerView(RecyclerView recyclerView) {super.onAttachedToRecyclerView(recyclerView);this.recyclerView= recyclerView;}/***   将RecycleView从Adapter解除*/@Overridepublic void onDetachedFromRecyclerView(RecyclerView recyclerView) {super.onDetachedFromRecyclerView(recyclerView);this.recyclerView = null;}
}
MainActivity
/*** Created by jzman on 2017/5/13 0013.*/
public class MainActivity extends AppCompatActivity {private RecyclerView rv;RvAdapter1 adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);rv = (RecyclerView) findViewById(R.id.rv);//设置布局管理器
//        rv.setLayoutManager(new LinearLayoutManager(this));//线性rv.setLayoutManager(new GridLayoutManager(this,4));//线性
//        rv.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//线性adapter = new RvAdapter1(this,initData());adapter.setOnItemClickListener(new RvAdapter1.OnItemClickListener() {@Overridepublic void onItemClick(RecyclerView parent, View view, int position, String data) {Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();}});rv.setAdapter(adapter);}public static ArrayList<String> initData(){ArrayList<String> arrayList = new ArrayList<>();for (int i=0;i<50;i++){arrayList.add("第"+i+"条数据");}return arrayList;}
}

显示效果

可以关注微信公众号:jzman-blog 获取最新文章更新,欢迎一起交流学习!

转载于:https://www.cnblogs.com/jzmanu/p/10284786.html

RecyclerView 的 Item 的单击事件相关推荐

  1. android recyclerview item点击事件,RecyclerView的Item的单击事件

    RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下: ...

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

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6758373.html RecyclerView 作为 ListView 和 GridView 的替代产物, ...

  3. RecyclerView实现Item点击事件

    概述 RecyclerView本身没有实现点击事件,需要自定义接口进行实现 接口定义 onRecyclerViewItemClickListener 接口名称随自己喜欢起,放置的位置也随你喜欢,因为是 ...

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

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

  5. RecyclerView条目item点击事件---放大

    Adapter–创建接口 //创建接口public interface RecyInterface{void vh(Viewholder viewholder);}//声明接口名private Rec ...

  6. layui 表格行单击事件选中行前的单选框

    layui表格中,行点击事件同时选中行前的单选框. //表格监听行单击事件table.on('row(test)', function(obj) {//选中行前radioTable.isCheckRa ...

  7. 微信小程序长按与单击事件触发

    方式一 wxml 片段 <view class="{{longPressTag==index?'long-press-status':''}}wx:for="{{search ...

  8. RecyclerView实现Item可拖拽(拖动、删除)

    RecyclerView实现Item可拖拽(拖动.删除) 话不多说,先附上效果图: ItemTouchHelper 这是一个RecyclerView的工具,提供了drag & swipe 的功 ...

  9. RecyclerView 删除Item 以及删除整个RecyclerView

    学而时习之,温故而知新. 今天用到了,居然忘记了,好尴尬,这里深夜了也在记录下, 1 删除整个RecyclerView hisList.clear();hisAdapter.notifyDataSet ...

最新文章

  1. pg_basebackup 配置 stream replication 异步/同步
  2. msp430入门学习16
  3. 如何创建复杂的机器学习项目?
  4. flaash-ACC_LSMOOTH2: Cannot continue with smoothing calculation
  5. C++ 容器 LIST VECTOR erase
  6. boost::gil::matrix3x2用法的测试程序
  7. 上大学了,但学校一般,该怎么办?
  8. 补习系列(3)-springboot中的几种scope
  9. 大中型网站使用图片域名的必要性原因
  10. xp系统简单tcpip服务器,XP系统怎样安装TCP/IP协议
  11. 互联网大厂的薪资和职级一览
  12. 大师级中国风复古景区网站设计及html前端源码
  13. python实现MD5加密工具
  14. Cisco(思科)无线路由器
  15. 基于CentOS 6.10的Oracle 11g RAC安装手册
  16. k8s部署微服务项目
  17. 论珊瑚虫并不光彩的历史
  18. Microblaze程序固化流程
  19. GBase XDM初识
  20. bzoj-3131 淘金

热门文章

  1. python如何获取请求的url_听说你在学习:如何通过代码请求URL地址
  2. 各种水龙头拆卸图解_水龙头上包卫生纸,竟有这种效果!邻居看了都想学
  3. c++ linux 环境,C++ 环境设置
  4. 栅格单元值的选取方法_ArcGIS中栅格数据重采样方法
  5. centos7根目录root扩容操作记录
  6. Hadoop的Mapreduce中Mapper的key和Map的key的区别
  7. 互联网晚报 | 4月17日 星期天 | 滴滴2021年第四季度收入同比下降;以岭药业表示世卫从未推荐连花清瘟;上海有序复工复产...
  8. 互联网日报 | 6月27日 星期日 | B站举办十二周年演讲;特斯拉在华召回285520辆汽车;小鹏汽车将于7月7日在港上市...
  9. 2020中国社交电商消费者购物行为研究报告
  10. unity3d 剧情制作_游戏设计作品集干货:跨专业如何入门 Unity3D 游戏引擎?