Android RecyclerView Item点击事件
来源:互联网 发布:做淘宝联盟怎么样 编辑:程序博客网 时间:2024/05/17 05:24
RecyclerView控件出来后可以代替ListView,功能更强大,但是RecyclerView却没有ListView的setOnItemClickListener和setOnLongClickListener方法,这里仿照ListView实现其Item点击事件;
第一步:RecyclerView为我们提供了OnItemTouchListener监听,所以写一个类实现RecyclerView.OnItemTouchListener,如:
到这里就算结束了,以后使用就方便多了;
最后这里提下,使用RecyclerView时必须设置mRecyclerView.setLayoutManager();这个属性,否则数据是无法显示的,应用不会报错,可以运行但就是不显示数据,曾经找了三个多小时才找到这个问题。源码中有一句A LayoutManager must be provided for RecyclerView to function,可以看出setLayoutManager()必须设置的
第一步:RecyclerView为我们提供了OnItemTouchListener监听,所以写一个类实现RecyclerView.OnItemTouchListener,如:
/** * Created by zyt on 2017/5/19. * 实现RecyclerView的点击监听 */public class ItemClickListener implements RecyclerView.OnItemTouchListener { private GestureDetector mGestureDetector; private OnItemClickListener mListener; //内部接口,定义点击方法以及长按方法 public interface OnItemClickListener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); } public ItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) { mListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { //这里选择SimpleOnGestureListener实现类,可以根据需要选择重写的方法 //单击事件 @Override public boolean onSingleTapUp(MotionEvent e) { View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null) { mListener.onItemClick(childView, recyclerView.getChildLayoutPosition(childView)); return true; } return false; } //长按事件 @Override public void onLongPress(MotionEvent e) { View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null) { mListener.onItemLongClick(childView, recyclerView.getChildLayoutPosition(childView)); } } }); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { //把事件交给GestureDetector处理 if (mGestureDetector.onTouchEvent(e)) { return true; } else return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { }}第二步就是调用了:mRecyclerView.addOnItemTouchListener(new ItemClickListener(this, mRecyclerView, new ItemClickListener.OnItemClickListener() {@Overridepublic void onItemClick(View view, int position) {//这里就可以处理Item点击逻辑}@Overridepublic void onItemLongClick(View view, int position) {//这里就可以处理Item的长按逻辑}}));}
到这里就算结束了,以后使用就方便多了;
最后这里提下,使用RecyclerView时必须设置mRecyclerView.setLayoutManager();这个属性,否则数据是无法显示的,应用不会报错,可以运行但就是不显示数据,曾经找了三个多小时才找到这个问题。源码中有一句A LayoutManager must be provided for RecyclerView to function,可以看出setLayoutManager()必须设置的
阅读全文
1 0
- Android RecyclerView Item点击事件
- Android-RecyclerView-Item点击事件设置
- Android-RecyclerView-Item点击事件设置
- Android-RecyclerView-Item点击事件设置
- Android-RecyclerView-Item点击事件设置
- Android RecyclerView给Item添加点击事件
- Android中RecyclerView使用,RecyclerView-Item点击事件设置
- RecyclerView设置Item点击事件
- RecyclerView Item 的点击事件
- RecyclerView中item点击事件
- RecyclerView设置 item点击事件
- RecyclerView的item点击事件
- RecyclerView item 点击事件设置
- RecyclerView的item点击事件
- RecyclerView中的item点击事件
- RecyclerView的item点击事件
- RecyclerView的Item点击事件
- RecyclerView的item点击事件
- ubuntu14.04 rabbitmq重启丢失用户信息
- Spring Boot中@OneToMany与@ManyToOne几个需要注意的问题
- yii2中gridview多表关联显示并可查询
- 简谈java软件架构的几个视角
- Activity管理类
- Android RecyclerView Item点击事件
- MySQL--取最近一小时内每五分钟的合计数据
- 征信良好贷款秒拒?你可能上了“灰名单”!
- 基于spring注解方式配置和使用spring AOP
- spring aop原理
- PHP常用函数总结(180多个)
- 银行卡验证接口API(仅需一行代码,实现全国银行卡核验)
- Intellij idea 非Maven项目导出War包
- 排序+中位数 Vijos P2871 安装服务器