HeaderAndFooterRecyclerViewAdapter

来源:互联网 发布:共享wifi软件 编辑:程序博客网 时间:2024/06/11 05:26
package com.qesion.mianla.module.adapter;import android.support.v7.widget.RecyclerView;import android.view.ViewGroup;/** * 含有头布局和脚布局的RecyclerViewAdapter */public abstract class HeaderAndFooterRecyclerViewAdapter                <                HeaderViewHolder extends RecyclerView.ViewHolder,                ContentItemViewHolder extends RecyclerView.ViewHolder,                FooterViewHolder extends RecyclerView.ViewHolder                >        extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    public static final int ITEM_TYPE_HEADER = 0xFFFFFF00;    public static final int ITEM_TYPE_CONTENT = 0xFFFFFF01;    public static final int ITEM_TYPE_FOOTER = 0xFFFFFF02;    public abstract int getHeaderCount();    public abstract int getContentItemCount();    public abstract int getFooterCount();    public abstract HeaderViewHolder onCreateHeaderViewHolder(ViewGroup parent);    public abstract ContentItemViewHolder onCreateContentItemViewHolder(ViewGroup parent, int viewType);    public abstract FooterViewHolder onCreateFooterViewHolder(ViewGroup parent);    public abstract void onBindHeaderViewHolder(HeaderViewHolder holder, int position);    public abstract void onBindContentItemViewHolder(ContentItemViewHolder holder, int position);    public abstract void onBindFooterViewHolder(FooterViewHolder holder, int position);    public boolean isHeaderView(int absPosition) {        int headerCount = getHeaderCount();        return headerCount != 0 && absPosition < headerCount;    }    public boolean isFooterView(int absPosition) {        return getFooterCount() != 0 && absPosition >= getHeaderCount() + getContentItemCount();    }    public boolean isContentItemView(int absPosition) {        return !isHeaderView(absPosition) && !isFooterView(absPosition);    }    public int getHeaderPosition(int absPosition) {        if (isHeaderView(absPosition)) {            return absPosition;        } else {            throw new IllegalArgumentException("position : " + absPosition + " is not a header view!");        }    }    public int getContentItemPosition(int absPosition) {        if (isContentItemView(absPosition)) {            return absPosition - getHeaderCount();        } else {            throw new IllegalArgumentException("absPosition : " + absPosition + " is not a content item view!");        }    }    public int getFooterPosition(int absPosition) {        if (isFooterView(absPosition)) {            return absPosition - getHeaderCount() - getContentItemCount();        } else {            throw new IllegalArgumentException("position : " + absPosition + " is not a footer view!");        }    }    @Override    public int getItemViewType(int absPosition) {        if (isHeaderView(absPosition)) {            return ITEM_TYPE_HEADER;        } else if (isFooterView(absPosition)) {            return ITEM_TYPE_FOOTER;        } else {            return ITEM_TYPE_CONTENT;        }    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        switch (viewType) {            case ITEM_TYPE_HEADER:                return onCreateHeaderViewHolder(parent);            case ITEM_TYPE_FOOTER:                return onCreateFooterViewHolder(parent);            default:                return onCreateContentItemViewHolder(parent, viewType);        }    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int absPosition) {        int viewType = getItemViewType(absPosition);        switch (viewType){            case ITEM_TYPE_HEADER:                HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder;                int headerPosition = getHeaderPosition(absPosition);                onBindHeaderViewHolder(headerViewHolder, headerPosition);                break;            case ITEM_TYPE_FOOTER:                FooterViewHolder footerViewHolder = (FooterViewHolder) holder;                int footerPosition = getFooterPosition(absPosition);                onBindFooterViewHolder(footerViewHolder, footerPosition);                break;            default:                ContentItemViewHolder contentItemViewHolder = (ContentItemViewHolder) holder;                int contentItemPosition = getContentItemPosition(absPosition);                onBindContentItemViewHolder(contentItemViewHolder, contentItemPosition);                break;        }    }    @Override    public int getItemCount() {        return getHeaderCount() + getContentItemCount() + getFooterCount();    }}

0 0
原创粉丝点击