Recyclerview的点击事件
来源:互联网 发布:知乎有趣的话题 编辑:程序博客网 时间:2024/05/19 12:18
recyclerview的点击事件最简单的方法
先写一个类
public class RecyclerViewClickListener implements RecyclerView.OnItemTouchListener { private int mLastDownX,mLastDownY; //该值记录了最小滑动距离 private int touchSlop ; private OnItemClickListener mListener; //是否是单击事件 private boolean isSingleTapUp = false; //是否是长按事件 private boolean isLongPressUp = false; private boolean isMove = false; private long mDownTime; //内部接口,定义点击方法以及长按方法 public interface OnItemClickListener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); } public RecyclerViewClickListener(Context context,OnItemClickListener listener){ touchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); mListener = listener; } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { int x = (int) e.getX(); int y = (int) e.getY(); switch (e.getAction()){ /** * 如果是ACTION_DOWN事件,那么记录当前按下的位置, * 记录当前的系统时间。 */ case MotionEvent.ACTION_DOWN: mLastDownX = x; mLastDownY = y; mDownTime = System.currentTimeMillis(); isMove = false; break; /** * 如果是ACTION_MOVE事件,此时根据TouchSlop判断用户在按下的时候是否滑动了, * 如果滑动了,那么接下来将不处理点击事件 */ case MotionEvent.ACTION_MOVE: if(Math.abs(x - mLastDownX)>touchSlop || Math.abs(y - mLastDownY)>touchSlop){ isMove = true; } break; /** * 如果是ACTION_UP事件,那么根据isMove标志位来判断是否需要处理点击事件; * 根据系统时间的差值来判断是哪种事件,如果按下事件超过1ms,则认为是长按事件, * 否则是单击事件。 */ case MotionEvent.ACTION_UP: if(isMove){ break; } if(System.currentTimeMillis()-mDownTime > 1000){ isLongPressUp = true; }else { isSingleTapUp = true; } break; } if(isSingleTapUp ){ //根据触摸坐标来获取childView View childView = rv.findChildViewUnder(e.getX(),e.getY()); isSingleTapUp = false; if(childView != null){ //回调mListener#onItemClick方法 mListener.onItemClick(childView,rv.getChildLayoutPosition(childView)); return true; } return false; } if (isLongPressUp ){ View childView = rv.findChildViewUnder(e.getX(),e.getY()); isLongPressUp = false; if(childView != null){ mListener.onItemLongClick(childView, rv.getChildLayoutPosition(childView)); return true; } return false; } return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { }}接着我们在MainActivity.java添加一段代码,同时不要忘记把方法一的代码注释掉哦: //调用RecyclerView#addOnItemTouchListener方法能添加一个RecyclerView.OnItemTouchListener对象 mRecyclerView.addOnItemTouchListener(new RecyclerViewClickListener(this,new RecyclerViewClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this,"Click "+mData.get(position),Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int position) { Toast.makeText(MainActivity.this,"Long Click "+mData.get(position),Toast.LENGTH_SHORT).show(); }}));
接下来就是在组件中调用方法
//调用RecyclerView#addOnItemTouchListener方法能添加一个RecyclerView.OnItemTouchListener对象 mRecyclerView.addOnItemTouchListener(new RecyclerViewClickListener(this,new RecyclerViewClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this,"Click "+mData.get(position),Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int position) { Toast.makeText(MainActivity.this,"Long Click "+mData.get(position),Toast.LENGTH_SHORT).show(); }}));
阅读全文
0 0
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView 的点击事件!
- RecyclerView的点击事件
- RecyclerView 的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- Recyclerview的点击事件
- Linux学习(CentOS-7)---磁盘分区(概念、分区方法、分区方案)
- 同余定理 + 快速幂
- 【I/O模型】几种IO模型浅析(一)
- [BZOJ2809][Apio2012]dispatching(dfs序+主席树)
- ADC的配置和一种新的ADC配置架构
- Recyclerview的点击事件
- 关于拉电流与灌电流
- Python filter()函数
- git cherry pick代码
- Spark常用算子详解汇总 : 实战案例、Java版本、Scala版本
- jzoj3578 【CEOI2013】Adriatic 巧妙dp
- 国内优秀的人工智能公司
- 594. Longest Harmonious Subsequence
- Oracle数据库 Insert 多行Values