给RecyclerView实现的GridView加上HeaderView和FooterView

一、利用   ItemViewType 区分普通项和头部尾部

二、将头部和尾部的项设置为占据整行,而不是像普通项一样只占据一个格子

 

给 RecyclerView 设置 GridLayoutManager 布局管理器

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);

在适配器中,利用 position 来判定每一项的类型:头部,普通项,底部

    @Override
    public int getItemViewType(int position) {
        int dataItemCount = getContentItemCount();
        if (mHeaderCount != 0 && position < mHeaderCount) {//头部View
            return ITEM_TYPE.ITEM_TYPE_HEADER.ordinal();
        } else if (mBottomCount != 0 && position >= (mHeaderCount + dataItemCount)) {//底部View
            return ITEM_TYPE.ITEM_TYPE_BOTTOM.ordinal();
        } else {
            return ITEM_TYPE.ITEM_TYPE_CONTENT.ordinal();
        }
    }

然后对应不同类型创建不同布局

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == ITEM_TYPE.ITEM_TYPE_HEADER.ordinal()) {
            return onCreateHeaderView(parent);
        } else if (viewType == ITEM_TYPE.ITEM_TYPE_CONTENT.ordinal()) {
            return onCreateContentView(parent, viewType);
        } else if (viewType == ITEM_TYPE.ITEM_TYPE_BOTTOM.ordinal()) {
            return onCreateBottomView(parent);
        }
        return null;
    }
此时的RecyclerView的头部和尾部是一个跟普通子项一样占一列的布局
 
接下来是最重要的部分,当item是头部或底部时,我们  让item占据整行
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            if (adapter.isHeaderView(position) || adapter.isBottomView(position)) {
                return gridLayoutManager.getSpanCount();
            }else{
                return 1;
            }
        }
    });

 adapter.isHeaderView(position) 和 adapter.isBottomView(position) 的判断跟 getItemViewType 差不多

此时就实现了头和底部占据一行,不再接在普通item后面了

转载于:https://www.cnblogs.com/wenhui92/p/6242683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值