android中RecyclerView嵌套问题中,内层RecyclerView区域无法响应Item点击事件 | 您所在的位置:网站首页 › recycleview嵌套recycleview内部位置重置 › android中RecyclerView嵌套问题中,内层RecyclerView区域无法响应Item点击事件 |
问题描述:
项目需求中要使用到RecyclerView内嵌套RecyclerView布局,但问题是,我点击外层RecyclerView,内层RecyclerView的区域无法响应外层的点击事件。 解决方法(方法不同,原理相同)注意:以下方法只是针对于内层RecyclerView没有设置任何点击事件的,有点击事件的暂时还没想到如何去设置,如果有知道的大佬可以在评论区告诉我,谢谢 1.方法一给内层的RecyclerView设置OnTouchListener,在onTouch中处理外层RecyclerView的Item的触摸事件 onTouchEvent。item已经设置了点击事件,所以在onTouchEvent的事件处理中会调用到item的点击事件。 good_list_rv.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return itemView.onTouchEvent(event); } }); 2.方法二依然是给内层的RecyclerView设置OnTouchListener,在onTouch中调用外层RecyclerView的Item的 preformClick方法 ,执行外层item的点击事件。 good_list_rv.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP){ itemView.performClick(); } return false; } }); 3.方法三这个方法,其实就是在方法二的基础上加了些判断,然后进行封装,代码如下: /** * 用于处理 RecyclerView嵌套RecyclerView,内层RecyclerView区域无法响应Item点击问题(内层recyclerview使用) */ public class ChildTouchListener implements View.OnTouchListener { private float downX; private float downY; private float touchSlop; private View view; public ChildTouchListener(View view){ this.view = view; touchSlop = ViewConfiguration.get(view.getContext()).getScaledTouchSlop(); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getActionMasked()){ case MotionEvent.ACTION_DOWN: downX = event.getX(); downY = event.getY(); break; case MotionEvent.ACTION_UP: if(Math.abs(event.getY()-downY) |
CopyRight 2018-2019 实验室设备网 版权所有 |