Android RecyclerView添加头部与尾部

RecyclerView一个艺术般的控件,完全取代了之前的ListView与GridView,并且有着比ListView与GridView更加强大的功能,可是RecyclerView缺有个非诚明显的瑕疵,竟然没有封装addHeaderView和addFooterView方法,没办法只好自己想办法实现了:

核心代码:
private class RecyclerAdapter extends RecyclerView.Adapter{

        private final static int HEAD_COUNT = 1;
        private final static int FOOT_COUNT = 1;

        private final static int TYPE_HEAD = 0;
        private final static int TYPE_CONTENT = 1;
        private final static int TYPE_FOOTER = 2;

        public int getContentSize(){
            return list.size();
        }

        public boolean isHead(int position){
            return HEAD_COUNT != 0 && position == 0;
        }

        public boolean isFoot(int position){
            return FOOT_COUNT != 0 && position == getContentSize() + HEAD_COUNT;
        }

        @Override
        public int getItemViewType(int position) {
            int contentSize = getContentSize();
            if (HEAD_COUNT != 0 && position == 0){ // 头部
                return TYPE_HEAD;
            }else if(FOOT_COUNT != 0 && position == HEAD_COUNT + contentSize){ // 尾部
                return TYPE_FOOTER;
            }else{
                return TYPE_CONTENT;
            }
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType == TYPE_HEAD){
                View itemView = LayoutInflater.from(GridActivity.this).inflate(R.layout.head_for_recyclerview,parent,false);
                return new RecyclerAdapter.HeadHolder(itemView);
            }else if(viewType == TYPE_CONTENT){
                View itemView = LayoutInflater.from(GridActivity.this).inflate(R.layout.item_for_recycler_view,parent,false);
                return new RecyclerAdapter.ContentHolder(itemView);
            }else{
                View itemView = LayoutInflater.from(GridActivity.this).inflate(R.layout.foot_for_recyclerview,parent,false);
                return new RecyclerAdapter.FootHolder(itemView);
            }
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if (holder instanceof RecyclerAdapter.HeadHolder){ // 头部

            }else if(holder instanceof RecyclerAdapter.ContentHolder){ // 内容
                RecyclerAdapter.ContentHolder myHolder = (RecyclerAdapter.ContentHolder) holder;
                myHolder.itemText.setText(list.get(position - 1));
            }else{ // 尾部

            }
        }

        @Override
        public int getItemCount() {
            return list.size() + HEAD_COUNT + FOOT_COUNT;
        }

        // 头部
        private class HeadHolder extends RecyclerView.ViewHolder{
            public HeadHolder(View itemView) {
                super(itemView);
            }
        }

        // 内容
        private class ContentHolder extends RecyclerView.ViewHolder{
            TextView itemText;
            public ContentHolder(View itemView) {
                super(itemView);
                itemText = (TextView)itemView.findViewById(R.id.item_text);
            }
        }

        // 尾部
        private class FootHolder extends RecyclerView.ViewHolder{
            public FootHolder(View itemView) {
                super(itemView);
            }
        }

    }

此时只需要将此适配器设为RecyclerView的列表模式的适配器就OK了.

在这里插入图片描述

表格模式需要增加这么一步:
final GridLayoutManager manager = new GridLayoutManager(this,3);
recyclerView.setLayoutManager(manager);
adapter = new RecyclerAdapter();
recyclerView.setAdapter(adapter);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        return adapter.isFoot(position) || adapter.isHead(position) ? manager.getSpanCount() : 1;
    }
});

在这里插入图片描述

完整代码: http://download.csdn.net/detail/y472360651/9838484

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值