为RecyclerView添加header和footer

本文主要介绍如何给RecyclerView添加自定义的头部和底部(header和footer),主要步骤如下:

1. 定义两个viewholder,分别用于头部和底部,名称自定

public class HeadViewHolder extends RecyclerView.ViewHolder {

    public HeadViewHolder(@NonNull View itemView) {
        super(itemView);
    }
}
public class FootViewHolder extends RecyclerView.ViewHolder {
    TextView tv_foot;
    public FootViewHolder(@NonNull View itemView) {
        super(itemView);
        tv_foot=itemView.findViewById(R.id.tv_foot);
    }
}

2. 重写adapter中的getItemViewType(),onCreateViewHolder(),onBindViewHolder(),getItemCount()等几个方法。

    其中,getItemViewType()主要用来区分不同类型的item,如果我们使用RecyclerView的时候只是需要简单的展示数据就不需要重写这个方法。其他几个方法在重写的时候和平时也有一些不太一样的地方,这个会在接下来的代码中体现。

首先在adapter中定义几个常量,用来区分不同的视图类型

public static final int TYPE_HEAD_VIEW = 0;//头部header
public static final int TYPE_CONTENT_VIEW = 1;/中间内容
public static final int TYPE_FOOTER_VIEW = 2;//底部footer
public static final int TYPE_EMPTY_VIEW = 3;//空视图

重写getItemViewType()

//HEADER_COUNT、FOOTER_COUNT为头部和底部view的个数
if(HEADER_COUNT!=0&&position<HEADER_COUNT){//第一个item
   return TYPE_HEAD_VIEW;
 }else if(FOOTER_COUNT!=0&&position>=(HEADER_COUNT+list.size())){//最后一个item
   return TYPE_FOOTER_VIEW;
 }else{//中间列表内容tiem
   return TYPE_CONTENT_VIEW;
 }

由于我们要同时展示header和footer,这样就相当于整个recycleview顶部和底部各自增加了一个item,所以需要重getItemCount,在内容列表数量的基础上将数量+2

public int getItemCount() {
    return list.size()+2;
}

接下来需要重写onCreateViewHolder和onBindViewHolder,在onCreateViewHolder中,需要根绝item类型的不同创建不同的viewholder

if(i==TYPE_HEAD_VIEW){
View head=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_head_view,viewGroup,false);
           return new HeadViewHolder(head);
        }else if(i==TYPE_EMPTY_VIEW){
           View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.empty_layout,viewGroup,false);
           return new EmptyViewHolder(view);
       }else if(i==TYPE_CONTENT_VIEW){
            View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_home,viewGroup,false);
return new HomeViewHolder(view);
}
@Override
 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
     if(viewHolder instanceof HomeViewHolder){// 显示内容列表
         ((HomeViewHolder)viewHolder).textView.setText(list.get(i-1));
     }
  }

大概的步骤就是这样了,可以运行起来试一试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值