android 二级折叠列表,Android中RecyclerView实现多级折叠列表效果(二)

前言

上面的这篇文章是之前写的,里面发现有很多不好用地方,也学到些新姿势,改动了许多地方。下面来看看详细的介绍:

要点:

1.可以通过后台控制Item的展示.

2.TreeRecyclerAdapter,可以展开,折叠.多级展示

3.adapter可以使用装饰者模式进行扩展.支持EmptyAdapter.可以添加headview和footview

4.item的样式可以编写文档,type与Class进行对应,实现后台控置,相同Item复用.

思路:(包含第一篇的思路)

1.adapter应该只需要关心List datas 的内容

2.把每个item看成独立的个体. 布局样式,每行所占比,onbindViewHolder由各个item实现。

3.每一个item应该只关心自己的数据和自己的下一级的数据,不会去关心上上级,下下级

4.展开的实现,点击时item把子数据拿出来,然后添加到adapter的datas中,变成同级,因为只会展开自己的下级数据。

5.折叠的实现,拿到下级数据(可以理解因为一个文件夹下文件),然后从adapter的datas中删除这些数据。

6.后台控制可以通过初始化注册的方法,将Item的Class注册.保存到集合里

7.后台返回字段,获取对应class文件,通过Class.newInstance()方法构建实例.

8.将ViewHolder与Adapter写成通用的,不需要再写多个Adatper与ViewHolder,只需要写多个Baseitem.与BaseItamData(JavaBean).

目录介绍

+ 1.Adapter

* Wapper------扩展的wapper,

* EmptyWapper --------当无数据时显示页面.

* HeaderAndFootWapper --------添加头部view和尾部view

- BaseRecyclerAdapter --------封装的Adatper基类

- ItemManager --------接口,管理Adatper刷新,增删操作

- TreeRecyclerAdapter ----多级列表,树形结构的adapter

- TreeRecyclerViewType ----多级列表的显示样式,枚举

- ViewHolder----封装的通用viewHodler

* 2.base

BaseItem ------item的封装

BaseItemData-----item的数据要求.javabean需要继承该类.

* 3.factory

ItemConfig ----添加item的class,配置样式

Itemfactory----通过class生成BaseItem的工厂类

* 4.view

TreeItem ----树形列表的子item

TreeItemGroup ----树形列表的父item

TreeParent---TreeItemGroup 实现该接口

TreeSelectItemGroup---可以选中子item的TreeItemGroup. demo:见购物页面

来张丑丑的图:

df778f2f1b302b1557bb751934f5c697.png

下面贴出部分代码:

(一).BaseRecyclerAdapter :

/**

* 普通BaseRecyclerAdapter,itme无父子关系.

* 限定泛型为BaseItem的子类.

* 通过BaseItem去处理ViewHolder

*/

public class BaseRecyclerAdapter extends

RecyclerView.Adapter {

private List mDatas;//展示数据

private ItemManager mItemManager;

private CheckItem mCheckItem;

@Override

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

//看源码,这里的parent就是Recyclerview,所以不会为null.可以通过它拿到context

return ViewHolder.createViewHolder(parent.getContext(), parent, viewType);

}

@Override

public void onBindViewHolder(ViewHolder holder, int position) {

T t = getDatas().get(position);

//检查是否绑定了ItemManage,因为item需要通过ItemManage告诉adapter刷新,增删

checkItemManage(t);

//具体onBindViewHolder放到item里面去实现

t.onBindViewHolder(holder);

//实现点击事件

onBindViewHolderClick(holder);

}

/**

* 实现item的点击事件

*

* @param holder 绑定点击事件的ViewHolder

*/

public void onBindViewHolderClick(final ViewHolder holder) {

//判断当前holder是否已经设置了点击事件

if (!holder.itemView.hasOnClickListeners()) {

holder.itemView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//获得holder的position

int layoutPosition = holder.getLayoutPosition();

//检查position是否可以点击

if (getCheckItem().checkPosition(layoutPosition)) {

//检查并得到真实的position

int itemPosition = getCheckItem().getAfterCheckingPosition(layou

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值