美文网首页android
RecyclerView的item中嵌套RecyclerView

RecyclerView的item中嵌套RecyclerView

作者: 程序员大耳 | 来源:发表于2019-05-18 11:16 被阅读48次

    场景:最外层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中判断要拦截或者不要拦截的事件区域。

    相关文章

      网友评论

        本文标题:RecyclerView的item中嵌套RecyclerView

        本文链接:https://www.haomeiwen.com/subject/gwgzaqtx.html