对于添加headerView或者footerView
其实HeaderView实际上也是Item的一种,只不过显示在顶部的位置,那么我们完全可以通过为其设置ItemType来完成。
有了思路以后,接下来考虑一些细节。
适配器
public class TimeTablesAdapter extends RecyclerView.Adapter< TimeTablesAdapter.ViewHolder> {
public static final int TYPE_HEADER = 0 ; //带有Header
public static final int TYPE_FOOTER = 1 ; //带有Footer
public static final int TYPE_NORMAL = 2 ; //不带有header和footer
List< TimetablesBean> listData ;
private LayoutInflater inflater ;
private Context mContext ;
/**
* HeaderView, FooterView
*/
private View mHeaderView ;
private View mFooterView ;
public TimeTablesAdapter( Context context) {
mContext = context;
this .inflater = LayoutInflater.from ( mContext ) ;
}
public void setListData( List< TimetablesBean> listData) {
this .listData = listData;
}
protected View getHeaderView() {
return mHeaderView ;
}
public void setHeaderView( View headerView) {
mHeaderView = headerView;
}
public View getFooterView() {
return mFooterView ;
}
protected void setFooterView( View footerView) {
mFooterView = footerView;
}
onCreateViewHolder
@Override
public TimeTablesAdapter.ViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
// return new ViewHolder(inflater.inflate(R.layout.activity_timetables_patternc, parent, false));
if ( mHeaderView != null && viewType == TYPE_HEADER) {
return new ViewHolder( mHeaderView ) ;
}
if ( mFooterView != null && viewType == TYPE_FOOTER) {
return new ViewHolder( mFooterView ) ;
}
View layout = inflater .inflate( R.layout.activity_timetables_patternc , parent, false ) ;
return new ViewHolder( layout) ;
}
onBindViewHolder
@Override
public void onBindViewHolder( TimeTablesAdapter.ViewHolder holder, int position) {
if ( getItemViewType( position) == TYPE_NORMAL) {
if ( holder instanceof ViewHolder) { //这里加载数据的时候要注意,是从position-1开始,因为position==0已经被header占用了
holder.mClassTitle .setText( "10:30-10:30 钢琴室" ) ;
return ;
}
return ;
} else if ( getItemViewType( position) == TYPE_HEADER) {
holder.mTotalSchedule .setText( "12" ) ;
return ;
} else {
return ;
}
}
getItemCount
@Override
public int getItemCount() {
if ( mHeaderView == null && mFooterView == null ) {
return listData .size() ;
} else if ( mHeaderView == null && mFooterView != null ) {
return listData .size() + 1 ;
} else if ( mHeaderView != null && mFooterView == null ) {
return listData .size() + 1 ;
} else {
return listData .size() + 2 ;
}
}
ViewHolder
class ViewHolder extends RecyclerView.ViewHolder {
private TextView mClassTitle , mTturriculum , mTClassroom , mTStudying , mTotalSchedule ;
public ViewHolder( View view) {
super ( view) ;
if ( itemView == mHeaderView ) {
mTotalSchedule = view.findViewById( R.id.tv_totalSchedule) ;
return ;
}
if ( itemView == mFooterView ) {
return ;
}
/**
* 内容
*/
mClassTitle = ( TextView) view.findViewById( R.id.tv_classTitle) ;
}
}
getItemViewType
@Override
public int getItemViewType( int position) {
if ( mHeaderView == null && mFooterView == null ) {
return TYPE_NORMAL ;
}
if ( position == 0 ) { //第一个item应该加载Header
return TYPE_HEADER ;
}
if ( position == getItemCount() - 1 ) { //最后一个,应该加载Footer
return TYPE_FOOTER ;
}
return TYPE_NORMAL ;
}
到此完成!!
可参考点击打开链接