RecyclerView 添加Header
来源:互联网 发布:阿里云服务器配置推荐 编辑:程序博客网 时间:2024/05/16 02:58
效果图:
原理:将Header当成普通的item添加上去
onAttachtoRecyclerView方法:判断position位置的item是不是Header,如果是Header则返回gridManager.getSpanCount()(表示当前item占据spanCount个单元格),否则占据1个单元格。@Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); if (manager instanceof GridLayoutManager) { final GridLayoutManager gridManager = ((GridLayoutManager) manager); gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return getItemViewType(position) == TYPE_HEADER ? gridManager.getSpanCount() : 1; } }); } }//position==0,返回Header @Override public int getItemViewType(int position) { if (position == 0) return TYPE_HEADER; else { ...... } }//根据viewType 确定返回Header或是普通item @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; if (viewType == TYPE_HEADER) { view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_header_homepage, parent, false); return new HeaderViewHolder(view); } if (viewType == VIEW_TYPE_ONE) { view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_onepic_homepage, parent, false); return new HomePageOnePicViewHolder(view); } else { view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_threepic_homepage, parent, false); return new HomePageThreePicViewHolder(view); } } @Override public void onBindViewHolder(final ViewHolder holder, int position) { if (holder.getItemViewType() == TYPE_HEADER) { final HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; ...... return; } final int pos = getRealPosition(holder); final UserHomePageBean userHomePageItem = userHomePageBeanList.get(pos); if (holder.getItemViewType() == VIEW_TYPE_THREE) { HomePageThreePicViewHolder homePageThreePicViewHolder = (HomePageThreePicViewHolder) holder; ...... } } //因为item的总数量是根据beanList判断的,添加了Header但是并没有在beanList中增加(因为数据结构不一致),所以添加了Header后itemCount应该加1 @Override public int getItemCount() { return mHeaderView == false ? userHomePageBeanList.size() : userHomePageBeanList.size() + 1; }//得到真正的position,因为在onBindView里要根据position来获得对应位置的beanList的数据,添加了Header之后,元素个数增加了1个,所以用原来的position得到的bean并不是对应位置的bean,而是正确的bean的后一个。所以如果添加了Header,实际position应该是原来的减1。 public int getRealPosition(ViewHolder holder) { int position = holder.getLayoutPosition(); return mHeaderView == false ? position : position - 1; }
阅读全文
0 0
- RecyclerView添加Header
- Android RecyclerView添加Header
- RecyclerView添加Header
- RecyclerView 添加Header
- RecyclerView添加Header和Footer
- RecyclerView 添加 Footer and Header
- RecyclerView添加Header和Footer
- RecyclerView添加Header和Footer
- RecyclerView添加header和footer
- RecyclerView添加header和footer
- Android RecyclerView添加Header头部
- RecyclerView 添加 Header 和 Footer
- RecyclerView 添加header footer------(2)
- RecyclerView添加Header和Footer
- RecyclerView添加Header的正确方式
- RecyclerView添加Header和Footer的基本原理
- RecyclerView添加Header的正确方式
- RecyclerView添加Header的正确方式
- uLua 热更新 增加Manager管理类时报错问题解决
- 《OC基础教程》读书笔记6-NSString基础方法整理
- linux系统挂载与取消挂载
- Android Dagger2入门详解(六)
- HDU
- RecyclerView 添加Header
- 【leetcode】第73题 Set Matrix Zeroes 题目+解析+JAVA代码
- 算法学习笔记4-动态规划-背包问题
- linux下更改mysql密码
- jsp 输出杨辉三角
- 【总结】PHP常见面试题汇总(三)
- TensorBoard使用
- js上传实现进度圆圈以及图片预览
- UINavigationBar的简单实用