打造RecyclerView的n级列表
先上效果图:
public abstract class BaseTreeRVAdapter<T extends RecyclerView.ViewHolder, M extends Tree> extends BaseRVAdapterV2<T, M> { @Override public void onBindViewHolder(T holder, final int position) { try { getLevel(position, mDatas, new PosBean()); } catch (StopMsgException ex) { int type = Integer.parseInt(ex.getMessage()); M tree = ex.getTree(); onBindViewHolder(type, tree, holder); } } @Override public int getItemViewType(int position) { try { getLevel(position, mDatas, new PosBean()); } catch (StopMsgException ex) { return Integer.parseInt(ex.getMessage()); } return 0; } @Override public int getItemCount() { return getTotal(mDatas); } protected abstract void onBindViewHolder(int type, M tree, T holder); public List<M> getDatas() { return mDatas; } public void setDatas(List<M> info) { if (info != null) { mDatas = info; } else { mDatas.clear(); } notifyDataSetChanged(); }}
注释1:主要是计算当前给的数据他的item个数,会根据是否展开的状态来统总个数
注释2:计算当前的postion对应的item层级,来显示对应的item布局
public class TreeListAdapter extends BaseTreeRVAdapter<RecyclerView.ViewHolder, T extends Tree> { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; RecyclerView.ViewHolder vh; switch (viewType) { case 0: ...... break; case 1: ...... break; case 2: ...... break; case 3: case 4: ...... } return vh; } @Override protected void onBindViewHolder(int type, final DiscountItem itemCategoryListBean, RecyclerView.ViewHolder holder) { switch (type) { case 0: ...... break; case 1: ...... break; case 2: ...... break; case 3: case 4: ...... } }}
上面的泛型T就是我们的Item的class类型,所以自定义的class要想用这个adapter的话,都需要实现Tree接口onBindViewHolder方法中形参的的type就是层级,比如说第一级type就是0,第二级是1,以此类推5.另外自定义的类如果不需要extends的话,那么需要继承wellijohn.org.treerecyclerview.vo.TreeItem,如果已经写了的话,那么就需要自己实现Tree接口。
必须实现的几个方法:
int getLevel();//每个item的层级,比如一级就是0,二级就返回1,这里的0和1可以自己定义,后面就是根据这个来选择哪种样式的item List<T> getChilds();//返回的子列表,比如当前类是一级的话,那么这个方法返回的是二级的列表数据 boolean isExpand();//是否展开,true展开,false不展开,一般就是点击下去修改这个值刷新adapter,就能达到展开还是折叠的目的了
6.引入方式
step 1.Add it in your root build.gradle at the end of repositories: allprojects { repositories { ... maven { url 'https://jitpack.io' } } }Step 2. Add the dependency dependencies { implementation 'com.github.WelliJohn:MultiLevelRecyclerView:0.0.1' }
7.demo示例
多级列表示例,如果觉得有用,还请点个赞。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。