• 给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后面了

  • 相关阅读:
    2块硬盘宝塔只能读取一块?宝塔一键磁盘挂载命令
    Python爬虫入门笔记
    linux搭建web(网站)环境
    织梦dedecms管理模块管理不动卡死解决办法
    php7.1安装swoole扩展
    Linux下centos7、PHP7.1安装Redis扩展教程
    centos7利用yum安装lnmp的教程(linux+nginx+php7.1+mysql5.7)
    Linux各目录及每个目录的详细介绍
    Linux samba的配置和使用
    PHP abstract与interface之间的区别
  • 原文地址:https://www.cnblogs.com/wenhui92/p/6242683.html
Copyright © 2020-2023  润新知