Android RecyclerView添加头部与尾部

来源:互联网 发布:淘宝店流量是什么意思 编辑:程序博客网 时间:2024/05/21 06:32

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了.

image

表格模式需要增加这么一步:
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;    }});

image

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

0 0
原创粉丝点击