简介
公司项目要实现一个复杂列表,并且单选的功能。
- 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帮助了我,以上的关键代码都是他给写的,在此感谢。
有更好实现方式的欢迎沟通,谢谢。