RecyclerView万能adapter封装(支持组件化)

本文介绍了如何封装一个高度解耦的RecyclerView万能Adapter,旨在简化项目中列表的适配器使用,避免因item类型增加而频繁修改Adapter。通过实现IRvSmartCell接口,数据model与viewType对应,实现多数据model和多样式绑定,同时保持高内聚低耦合。文章详细讲解了封装过程,并展示了两种不同的样式效果。
摘要由CSDN通过智能技术生成

项目中用到的最多的元素就是列表,在android中目前最流行了的当属RecylerView了。项目中也涉及到很多RecylerView替换Listview的场景。看过比较多对adapter封装的文章,总有些不太简洁。所以本文将介绍自己封装的高度解耦Adapter和viewholder。帮你快速高效生成一个万能列表。

理念

  1. 构造一个通用的Adapter,避免一个列表一个适配器,避免增加(viewType)item列表就要对Adapter进行修改。
  2. 将每个Item抽象成独立组件,每个独立组件可在使用适配器前任意位置注册,完全数据驱动样式
  3. 支持多数据model和多样式一一对应
  4. 高内聚低耦合

思路

  1. 抽象数据model,每个数据model实现抽象接口IRvSmartCell。
  2. 封装Adapter的getItemViewType,实现model中type和viewType对应
  3. 封装万能ViewHolder,通过接口桥接代理ViewHolder的绑定和解绑
  4. 封装Adapter的onCreateViewHolder和onBindViewHolder
  5. 样式仓库,注册列表cell的实现

实现

  1. model接口的定义
/**
 * 万能适配器的model接口
 */
public interface IRvSmartCell {
   
    /**
     * 
     * @return 返回唯一的itemType
     */
    String getType();
}

/**
 * 一种model的默认实现
 */
public class RvSmartBaseCell implements IRvSmartCell {
   
    protected String itemType;

    public RvSmartBaseCell(String itemType) {
   
        this.itemType = itemType;
    }

    @Override
    public String getType() {
   
        return itemType;
    }
}
  1. 封装Adapter的getItemViewType
@Override
public int getItemViewType(int position) {
   
    T data = mDataList.get(position);
    if (data == null)
        return -1;
    // we should use getType()
    String typeKey = data.getType();
    if (!mStrKeys.containsKey(typeKey)) {
   
        int newType = mTypeId.getAndIncrement();
        mStrKeys.put(typeKey, newType);
        mId2Types.put(newType, data.getType());
    }
    return mStrKeys.get(typeKey).intValue();

}
  1. 封装万能ViewHolder
public class RvSmartHolder
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值