Android 简捷地为RecyclerView添加HeadView和FootView

之前自己尝试用ViewType的思路去实现为RecyclerView添加HeadView和FootView,总感觉自己写的代码太啰嗦了,向两位大神学习了一下他们的编码思路写了个简单了些的,分享给大家。大笑

RecyclerView添加Header的正确方式

Android 优雅的为RecyclerView添加HeaderView和FooterView

废话不多说,上图上代码。

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

    private View headView;
    private View footView;
    public static final int HEAD = 1;
    public static final int NORMAL = 2;
    public static final int FOOT = 3;

    private List<String> datas;

    public RecyclerAdapter(List<String> datas) {
        this.datas = datas;
    }

    public void addHeadView(View headView) {
        this.headView = headView;
    }

    public void addFootView(View footView) {
        this.footView = footView;
    }

    public int getHeadViewCount() {
        return headView == null ? 0 : 1;
    }

    public int getFootViewCount() {
        return footView == null ? 0 : 1;
    }

    @Override
    public int getItemCount() {
        return datas.size() + getHeadViewCount() + getFootViewCount();
    }

    @Override
    public int getItemViewType(int position) {
        if (position < getHeadViewCount()) return HEAD;
        if (position >= datas.size() + getHeadViewCount()) return FOOT;
        return NORMAL;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        if (viewType == HEAD) return new ViewHolder(headView);
        if (viewType == FOOT) return new ViewHolder(footView);
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_recycleritem, null);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        if (getItemViewType(position) == HEAD) return;
        if (getItemViewType(position) == FOOT) return;
        holder.tvItem.setText(datas.get(position-getHeadViewCount()));
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.tv_item)
        TextView tvItem;
        public ViewHolder(View itemView) {
            super(itemView);
            if (itemView == headView) return;
            if (itemView == footView) return;
            ButterKnife.bind(this, itemView);
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值