给RecyclerView添加头部和尾部最简单的实现方式
来源:互联网 发布:淘宝质量好的男装 编辑:程序博客网 时间:2024/05/22 14:15
参考:Android 优雅的为RecyclerView添加HeaderView和FooterView
其实实现的最简单的方式就是扩展一下RecyclerView.Adapter
伪代码如下:
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == HEADERTYPE) { ViewHolder holder = ViewHolder.createViewHolder(parent.getContext(), getHeaderView()); return holder; } else if (viewType== FOOTERTYPE) { ViewHolder holder = ViewHolder.createViewHolder(parent.getContext(), getFooterView()); return holder; } return mInnerAdapter.onCreateViewHolder(parent, viewType); }
当然还有getItemViewType方法:
@Override public int getItemViewType(int position) { if (position==。。。) { return HEADERTYPE; } else if (position==。。。) { return FOOTERTYPE; } return mInnerAdapter.getItemViewType(position - getHeadersCount()); }
最后ItemCount要加上头和尾的数量
@Override public int getItemCount() { return getHeadersCount() + getFootersCount() + getRealItemCount(); }
实现上面的代码运行之后你会发现线性的没有问题了,但是Grid的和瀑布流的还是有问题,只需要再重写两个方法就可以了
针对Grid的
Overridepublic void onAttachedToRecyclerView(RecyclerView recyclerView){ innerAdapter.onAttachedToRecyclerView(recyclerView); RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { final GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; final GridLayoutManager.SpanSizeLookup spanSizeLookup = gridLayoutManager.getSpanSizeLookup(); gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { int viewType = getItemViewType(position); if (mHeaderViews.get(viewType) != null) { return layoutManager.getSpanCount(); } else if (mFootViews.get(viewType) != null) { return layoutManager.getSpanCount(); } if (oldLookup != null) return oldLookup.getSpanSize(position); return 1; } }); gridLayoutManager.setSpanCount(gridLayoutManager.getSpanCount()); }}
针对瀑布流的
@Overridepublic void onViewAttachedToWindow(RecyclerView.ViewHolder holder){ mInnerAdapter.onViewAttachedToWindow(holder); int position = holder.getLayoutPosition(); if (isHeaderViewPos(position) || isFooterViewPos(position)) { ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); if (lp != null && lp instanceof StaggeredGridLayoutManager.LayoutParams) { StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp; p.setFullSpan(true); } }}
我都能看懂,基本也都能看懂,我这里就不解释了,改变一下单个item的占用的span数。
0 0
- 给RecyclerView添加头部和尾部最简单的实现方式
- Android 给RecyclerView添加头部和尾部
- recyclerview 添加头部和尾部的优雅
- RecyclerView添加头部和尾部
- RecyclerView添加头部和尾部
- RecyclerView添加头部尾部
- RecyclerView 添加头部和尾部,并实现Item的点击事件
- RecyclerView 添加头部和尾部,并实现Item的点击事件
- RecyclerView 添加头部和尾部布局
- Android RecyclerView添加头部和尾部
- RecyclerView 添加头部和尾部布局
- RecyclerView 添加头部和尾部布局
- 为RecyclerView添加头部和尾部
- Android RecyclerView添加头部和尾部
- 自定义带头部和尾部的RecyclerView
- (4.1.45.1)RecyclerView 添加头部和尾部布局 一
- RecyclerView学习(1) 添加头部和尾部
- RecyclerView添加头部和尾部并解决no
- python __call__ 函数
- MySql触发器,以及如何手动抛出异常
- HTTPS
- 海量数据处理之Bloom Filter详解
- 自己整理的最新验证手机号的正则表达式
- 给RecyclerView添加头部和尾部最简单的实现方式
- 设计模式-单例模式
- android 沉浸式状态栏(像ios那样的状态栏与应用统一颜色样式)
- Windows7下安装IntelliJ ideaIU-2016.2.2
- RecyclerView使用完全指南,是时候体验新控件了(二)
- 自定义导航转场动画
- java8 遍历数组的几种方式
- Picasso
- MySQL追加注释或者大量修改注释