场景:最外层RecyclerView垂直布局可上下滑动,内部有个Item需要嵌套RecyclerView垂直布局也可上下滑动,如果不做处理会发生滑动冲突,外层RecyclerView滑动,内层不可滑。
解决方法
1、RV addOnItemTouchListener 监听touchEvent获取event坐标点,找到被点击位置的item,判断是否是需要拦截的item
mRecycler.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
// 外层RV滑动与内层布局滑动冲突解决
if (e !=null) {
// 找到被点击位置的item的rootView
View itemView = rv.findChildViewUnder(e.getX(), e.getY());
if (itemView !=null) {
// 通过rootView找到对应的ViewHolder
BaseAdapter.VH holder = (BaseAdapter.VH) rv.getChildViewHolder(itemView);
if (holder.getViewHolderType() == R.layout.view_pinyin_card) {
((ViewGroup) itemView).requestDisallowInterceptTouchEvent(true);
}
}
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
总结:父布局onInterceptTouchEvent中判断要拦截或者不要拦截的事件区域。
网友评论