上次使用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; }(3)接下来重写getviewtype方法,判断是否有headerview,根据是否有headerview返回不同的标志位;public void setmHeaderView(View mHeaderView) { this.mHeaderView = mHeaderView; notifyItemInserted(0); }
@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代码就是这么简单,这样可以将recycleview的布局文件和headerview的布局文件实现分离,使代码看起来足够清晰,滑动效果也相当完美!!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); }
如果不懂上述baseadapter和baseviewholder的具体代码,可以上上一篇博客查看,只是对相应方法进行了修改:http://blog.csdn.net/chenbaige/article/details/51382833
本文介绍了一种改进的RecyclerView头部集成方法,避免使用recyclerviewheader库带来的局限性。通过在adapter中直接修改,将header视图绑定到第一个item,以实现更清晰的代码结构和流畅的滑动体验。

2万+

被折叠的 条评论
为什么被折叠?



