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
- HeaderAndFooterRecyclerViewAdapter
- webview添加请求头
- 第十二周-OJ-B进制转换
- O2O
- 两个非递减有序集合合并为一个非递减有序集合
- 从最小二乘学习推出SVM
- HeaderAndFooterRecyclerViewAdapter
- 编排管理成容器云关键 Kubernetes(K8s)和Swarm对比分析
- springmvc-servlet.xml中use-default-filters的作用
- Trim()、TrimStart()、TrimEnd()的用法
- jmeter从文件中读取参数,并实现循环
- 静态库、动态库及导入库
- 平面设计之条幅篇
- oracle ROW_NUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法(含lag lead用法)
- linux svn服务器搭建、客户端操作、备份与恢复