Android设置RecyclerView的Header和Footer
getItemViewType方法设置相应条目的显示位置
//定义常量 判断RecyclerView具体的加载方式
public static final int TYPE_NORMAL = 0; //说明是不带有header和footer的
public static final int TYPE_HEADER = 1; //说明是带有Header的
public static final int TYPE_FOOTER = 2; //说明是带有Footer的
//将视图同条目位置进行匹配
@Override
public int getItemViewType(int position) {
//如果都不存在 返回的视图类型为常规适配器 正常就可 不需要特殊加载
if(mHeaderView == null && mFooterView == null){
return TYPE_NORMAL;
}
//设置不同View视图的位置 (有头时)且是在第一个条目时 返回对应的布局
if(mHeaderView != null && position == 0){
return TYPE_HEADER;
}
//设置不同View视图的位置 (有脚时)且在最后一个条目时 返回对应的布局
if(mFooterView != null && position == getItemCount() - 1){
return TYPE_FOOTER;
}
return TYPE_NORMAL;
}
ViewHolder类返回不同的视图
//根据加载方式 来加载对应的视图 RecyclerView必然加载
//首先要有相对应的视图
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//
if(mHeaderView != null && viewType == TYPE_HEADER){
return new ViewHolder(mHeaderView);
}
if (mFooterView != null && viewType == TYPE_FOOTER){
return new ViewHolder(mFooterView);
}
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_floor,parent,false);
return new ViewHolder(view);
}
onBindViewHolder方法对不同条目做出不同的处理
//正常方式处理
if(getItemViewType(position) == TYPE_NORMAL){
//判断类型是否相匹配
if(holder instanceof ViewHolder){
//注意此时第0个条目已经被占据 因此要从position-1 来加载集合数据
FloorBean.DataBean dataBean = message.get(position-1);
Glide.with(context).load(dataBean.getFloor_title().getImage_src()).into(holder.getImgTitle());
List<FloorBean.DataBean.Commodity> product_list = dataBean.getProduct_list();
ArrayList<String> imgUilList = new ArrayList<>();
for(FloorBean.DataBean.Commodity commodity : product_list){
imgUilList.add(commodity.getImage_src());
}
ImageView[] imgs = {
holder.getImgOne(),holder.getImgTwo(),holder.getImgThree(),holder.getImgFour()