RecyclerView嵌套RecyclerView并实现单选

简介

公司项目要实现一个复杂列表,并且单选的功能。

  • RecyclerView嵌套RecyclerView,外层的 RecyclerView是竖直方向,内层的 RecyclerView 是横向的滑动
  • 解决滑动的冲突卡顿现象
  • 实现内层条目长按选中,单击取消选择

走的弯路:设置setFocusableInTouchMode等网上的一些方法都没凑效

先看效果图

Oct-11-2018 21-00-51.gif

关键代码

建立缓存池缓存 View

      //修改RecyclerView的item缓存个数,缓存个数 = 集合长度
        RecyclerView.RecycledViewPool viewPool = new RecyclerView.RecycledViewPool();
        viewPool.setMaxRecycledViews(RvAdapter.ITEM_TYPE, mBean.getDatas().size());
        mRecyclerView.setRecycledViewPool(viewPool);
 //重写改方法,设置ItemViewType
    @Override
    public int getItemViewType(int position) {
        //返回值与使用时设置的值需保持一致
        return ITEM_TYPE;
    }
/*
         1.把内部RecyclerView的adapter和集合数据通过holder缓存
         2.使内部RecyclerView的adapter提供设置position的方法
         */
        holder.list.clear();
        holder.list.addAll(mList.get(position).getJarInfo());
        if (holder.mRvAdapter == null) {
            holder.mRvAdapter = new RvvAdapter(mContext, holder.list, position);
            LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
            layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
            holder.rvItemItem.setLayoutManager(layoutManager);
            holder.rvItemItem.setAdapter(holder.mRvAdapter);
        } else {
            holder.mRvAdapter.setPosition(position);
            holder.mRvAdapter.notifyDataSetChanged();
        }

其实把……这个东西研究了一阵子,没实现,还是来自 CSDN的SkySmile1992帮助了我,以上的关键代码都是他给写的,在此感谢。

有更好实现方式的欢迎沟通,谢谢。

源代码

你可能感兴趣的:(RecyclerView嵌套RecyclerView并实现单选)