Android中RecyclerView实现多级折叠列表效果(TreeRecyclerView)
前言
首先不得不吐槽一下产品,尼玛为啥要搞这样的功能....搞个两级的不就好了嘛...自带控件,多好。三级,四级,听说还有六级的....这样丧心病狂的设计,后台也不好给数据吧。
先看看效果:
两级的效果:
三级的效果:
全部展开的效果(我只写了五级)
说说为什么写这货吧:
公司产品提出三级这个需求后,我就在网上找啊找.
找的第一个,发现实现其实是ExpandListview嵌套.
找的第二个,ExpandRecyclview,然后就用呗,发现三级展开很卡,看源码,
发现是RecyclerView套RecyclerView
就没有不嵌套的么.....
然后找到hongyang的那个博客,写个试试吧.
说说思路:
1.Treeadapter应该只需要关心List<TreeAdapterItem> datas 的内容
2.把每个item看成独立的个体,布局样式,每行所占比,bindViewHolder都由自己的来决定。
3.每一个item应该只关心自己的数据和自己的下一级的数据,不会去关心上上级,下下级
4.展开的实现,item把子数据集拿出来,然后添加到List<TreeAdapterItem> datas,变成与自己同级,因为每次展开只会展开一级数据。
5.折叠递归遍历所有子数据,递归拿到自己所有的子数据集(可以理解因为一个文件夹下所有的文件,包括子文件夹下的所有),然后从List<TreeAdapterItem> datas删除这些数据。
见代码:
public abstract class TreeAdapterItem<D> { protected D data; protected List<TreeAdapterItem> childs; protected boolean isExpand; protected int layoutId; protected int spanSize; ···· get/set方法省略。。。。 ···· public TreeAdapterItem(D data) { this.data = data; childs = initChildsList(data); layoutId = initLayoutId(); spanSize = initSpansize(); } public void onExpand() { isExpand = true; } public void onCollapse() { isExpand = false; } public List<TreeAdapterItem> getAllChilds() { ArrayList<TreeAdapterItem> treeAdapterItems = new ArrayList<>(); for (int i = 0; i < childs.size(); i++) { TreeAdapterItem treeAdapterItem = childs.get(i); treeAdapterItems.add(treeAdapterItem); if (treeAdapterItem.isParent()) { List list = treeAdapterItem.getAllChilds(); if (list != null && list.size() > 0) { treeAdapterItems.addAll(list); } } } return treeAdapterItems; } public boolean isParent() { return childs != null && childs.size() > 0; } public int initSpansize() { return spanSize; } protected abstract List<TreeAdapterItem> initChildsList(D data); protected abstract int initLayoutId(); public abstract void onBindViewHolder(ViewHolder holder);}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Android中RecyclerView实现多级折叠列表效果(TreeRecyclerView)
下载Word文档到电脑,方便收藏和打印~