BaseRecyclerAdapter之添加不同布局(头部尾部)

字数615 阅读2604 评论19

最近写了个Android开源库「BaseRecyclerViewAdapterHelper」集成了很多常见需求的解决方案,希望大家多多star哦~!



多个布局item

头部+尾部

如何使用?

多个不同布局

public class MultipleItemAdapter extends BaseQuickAdapter<String> {
    private final int TEXT_TYPE = 1;
    private int mTextLayoutResId; 
   public MultipleItemAdapter(Context context, List data, int... layoutResId) {
        super(context, layoutResId[0], data);
        mTextLayoutResId = layoutResId[1];
    }
    @Override
    protected int getDefItemViewType(int position) {
        if (position % 2 == 0)
            return TEXT_TYPE;
        return super.getDefItemViewType(position);
   } 
   @Override
    protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TEXT_TYPE)
            return new TextViewHolder(getItemView(mTextLayoutResId, parent));
        return super.onCreateDefViewHolder(parent, viewType);
    }
    @Override
    protected void onBindDefViewHolder(BaseViewHolder holder, String item) {
        if (holder instanceof TextViewHolder)
            holder.setText(R.id.tv, item); 
   }
    @Override
    protected void convert(BaseViewHolder helper, String item) {
        helper.setImageUrl(R.id.iv, item);
    }
    public class TextViewHolder extends BaseViewHolder {
        public TextViewHolder(View itemView) {
            super(itemView.getContext(), itemView);
        }
    }
}

添加头部尾部

mQuickAdapter.addHeaderView(getView());
mQuickAdapter.addFooterView(getView());

原理分析

如果需要定义多个不同类型的布局,需要知道以下几点:

  • 重写getItemViewType()方法,根据需求规则给出不同的type值。
  • 在onCreateViewHolder()方法里面根据不同的type来创建不同的ViewHolder
  • 在onBindViewHolder()里面根据不同holder的类型来赋予相对于的数据
  • 如果有额外布局(如:头部尾部)需要修改getItemCount()方法的返回数量

多个不同的布局的实现(三部曲)

1.重写了getDefItemViewType()方法,其实也就是父类的getItemViewType()里面的方法,如上所说,根据页面需求,做出规则,因为上面的UI是一个TextView一个ImageView交替的来,所以就写了个这样规则的if (position % 2 == 0)保证他们交替着显示。
2.type搞定了,接下来就是调用onCreateDefViewHolder()了,根据上面的type来创建不同的ViewHolder,
3.然后再接下来调用onBindDefViewHolder(),根据上面创建的ViewHolder的类型不同来进行相应的赋值。

添加头部和尾部(额外布局)

在上面的基础之上再重写getItemCount()在原本数据量上加上根据额外布局的数量,代码如下

@Override

public int getItemCount() {

int i = mNextLoadEnable ? 1 : 0;

return mData.size() + i + getHeaderViewsCount() + getFooterViewsCount();

}

注意:如果是添加头部
那就必须在原onBindViewHolder()里面position-头部数量,因为不减去的话,那么数据就会从第二条开始遍历,所以要注意!

int index = position - getHeaderViewsCount();
convert(baseViewHolder, mData.get(index));

意外收获


国际友人的加盟

每次收获一点点,后续还会扩展更多功能,供大家使用及学习「BaseRecyclerViewAdapterHelper」。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值