如何优雅的实现recycleview加入顶部headerview,实现一起滑动效果

本文介绍了一种改进的RecyclerView头部集成方法,避免使用recyclerviewheader库带来的局限性。通过在adapter中直接修改,将header视图绑定到第一个item,以实现更清晰的代码结构和流畅的滑动体验。

上次使用recyclerviewheader实现了在recycleview的顶部成功加入了headerview,但是随着开发的深入,发现其使用局限性越来越大,代码层次感也不够清晰,感觉太冗余,经过深思熟虑之后,决定使用另一种优雅的方法,直接修改adapter,将headerview绑定到第一个布局,实现效果相当完美,代码层次感也出来了,话不多说,直接上代码:

继上一篇通过加入recyclerviewheader开源框架实现之后,接下来是直接在上一篇中的adapter中直接修改

(1)在adapter中定义两个标志量,分别代表header布局和普通布局:

//header布局标志
private static final int TYPE_HEADER=0;
//普通布局标志
public static final int TYPE_NORMAL=1;
(2)然后通过get构造器让我们可以通过adapter直接调用构造器直接设置headerview:
//headerview的布局
private View mHeaderView;

public View getmHeaderView() {
    return mHeaderView;
}
public void setmHeaderView(View mHeaderView) {
    this.mHeaderView = mHeaderView;
    notifyItemInserted(0);
}

(3)接下来重写getviewtype方法,判断是否有headerview,根据是否有headerview返回不同的标志位;
@Override
public int getItemViewType(int position) {
    if(mHeaderView==null) return TYPE_NORMAL;
    if(position==0)return TYPE_HEADER;//将header插入到顶部
    return TYPE_NORMAL;
}
(4)在onCreateViewHolder根据不同的类型返回不同的viewholder:
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if(mHeaderView!=null&&viewType==TYPE_HEADER) return new BaseViewHolder(mHeaderView,mHeaderView,null);
    View mView = null;
    mView = mInflater.inflate(itemViewID, null, false);
    return new BaseViewHolder(mView, mHeaderView,monItemClickListener);
}
(5)最后在onBindViewHolder方法中根据不同的类型返回不同的布局,
@Override
public void onBindViewHolder(BaseViewHolder holder, int position) {
    if(getItemViewType(position)==TYPE_HEADER) return;
    bindData(holder, position);
}
(6)最后在baseviewholder中判断itemview是否为headerview,然后让adapter加载不同的viewholder
public BaseViewHolder(View itemView,View mHeaderView, BaseAdapter.onItemClickListener onItemClickListener) {
    super(itemView);
    this.mHeaderView=mHeaderView;
    if(itemView==mHeaderView) return;
    mViews = new SparseArray<>();
    this.monItemClickListener = onItemClickListener;
    itemView.setOnClickListener(this);
}

代码就是这么简单,这样可以将recycleview的布局文件和headerview的布局文件实现分离,使代码看起来足够清晰,滑动效果也相当完美!!
如果不懂上述baseadapter和baseviewholder的具体代码,可以上上一篇博客查看,只是对相应方法进行了修改:http://blog.csdn.net/chenbaige/article/details/51382833

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值