BaseRecyclerAdapter之添加不同布局(头部尾部)
2016-08-15 09:51
197 查看
字数615
阅读2604 评论19
喜欢16
最近写了个Android开源库「BaseRecyclerViewAdapterHelper」集成了很多常见需求的解决方案,希望大家多多star哦~!
多个布局item
头部+尾部
重写getItemViewType()方法,根据需求规则给出不同的type值。
在onCreateViewHolder()方法里面根据不同的type来创建不同的ViewHolder
在onBindViewHolder()里面根据不同holder的类型来赋予相对于的数据
如果有额外布局(如:头部尾部)需要修改getItemCount()方法的返回数量
2.type搞定了,接下来就是调用
3.然后再接下来调用
注意:如果是添加头部
那就必须在原
国际友人的加盟
每次收获一点点,后续还会扩展更多功能,供大家使用及学习「BaseRecyclerViewAdapterHelper」。
阅读2604 评论19
喜欢16
最近写了个Android开源库「BaseRecyclerViewAdapterHelper」集成了很多常见需求的解决方案,希望大家多多star哦~!
头部+尾部
如何使用?
多个不同布局
public class MultipleItemAdapter extends BaseQuickAdapter<String> { private final int TEXT_TYPE = 1; private int mTextLayoutResId; public MultipleItemAdapter(Context context, List data, int... layoutResId) { super(context, layoutResId[0], data); mTextLayoutResId = layoutResId[1]; } @Override protected int getDefItemViewType(int position) { if (position % 2 == 0) return TEXT_TYPE; return super.getDefItemViewType(position); } @Override protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) { if (viewType == TEXT_TYPE) return new TextViewHolder(getItemView(mTextLayoutResId, parent)); return super.onCreateDefViewHolder(parent, viewType); } @Override protected void onBindDefViewHolder(BaseViewHolder holder, String item) { if (holder instanceof TextViewHolder) holder.setText(R.id.tv, item); } @Override protected void convert(BaseViewHolder helper, String item) { helper.setImageUrl(R.id.iv, item); } public class TextViewHolder extends BaseViewHolder { public TextViewHolder(View itemView) { super(itemView.getContext(), itemView); } } }
添加头部尾部
mQuickAdapter.addHeaderView(getView()); mQuickAdapter.addFooterView(getView());
原理分析
如果需要定义多个不同类型的布局,需要知道以下几点:重写getItemViewType()方法,根据需求规则给出不同的type值。
在onCreateViewHolder()方法里面根据不同的type来创建不同的ViewHolder
在onBindViewHolder()里面根据不同holder的类型来赋予相对于的数据
如果有额外布局(如:头部尾部)需要修改getItemCount()方法的返回数量
多个不同的布局的实现(三部曲)
1.重写了getDefItemViewType()方法,其实也就是父类的
getItemViewType()里面的方法,如上所说,根据页面需求,做出规则,因为上面的UI是一个TextView一个ImageView交替的来,所以就写了个这样规则的
if (position % 2 == 0)保证他们交替着显示。
2.type搞定了,接下来就是调用
onCreateDefViewHolder()了,根据上面的type来创建不同的ViewHolder,
3.然后再接下来调用
onBindDefViewHolder(),根据上面创建的ViewHolder的类型不同来进行相应的赋值。
添加头部和尾部(额外布局)
在上面的基础之上再重写getItemCount()在原本数据量上加上根据额外布局的数量,代码如下
@Override public int getItemCount() { int i = mNextLoadEnable ? 1 : 0; return mData.size() + i + getHeaderViewsCount() + getFooterViewsCount(); }
注意:如果是添加头部
那就必须在原
onBindViewHolder()里面position-头部数量,因为不减去的话,那么数据就会从第二条开始遍历,所以要注意!
int index = position - getHeaderViewsCount(); convert(baseViewHolder, mData.get(index));
意外收获
国际友人的加盟
每次收获一点点,后续还会扩展更多功能,供大家使用及学习「BaseRecyclerViewAdapterHelper」。
相关文章推荐
- BaseRecyclerAdapter之添加不同布局(头部尾部)
- BaseRecyclerAdapter之添加不同布局(头部尾部)
- BaseRecyclerAdapter之添加不同布局(优化篇)
- (4.1.45.1)RecyclerView 添加头部和尾部布局: 仿HeaderViewListAdapter装饰器模式
- RecyclerView 添加head view头部 和foot view尾部、设置水平horizontal时左侧布局和右侧布局
- RecyclerView 添加头部和尾部布局
- RecyclerView 添加头部和尾部布局
- RecyclerView 添加头部和尾部布局
- BaseAdapter之给 RecyclerView添加HeaderView
- RecyclerView 头部添加布局 简单示例
- RecyclerView添加头尾部,支持网格和瀑布流布局
- 给RecyclerView添加头部和尾部最简单的实现方式
- 可以添加头部和尾部View并且支持setOnItemClickListener和滑到底部自动加载更多的RecyclerView
- 快速实现RecycleView的网格和瀑布流布局添加头部(尾部原理一样,故略之)
- BaseRecyclerAdapter之添加动画
- RecyclerView添加多个样式不同的Item布局
- 为RecyclerView的不同item项实现不同的布局(添加分类Header)
- Android BaseAdapter加载多个不同的Item布局时出现UncaughtException in Thread main java.lang.ArrayIndexOutOfBoundsException: length=15; index=15
- RecyclerView LayoutManager分析 添加头部尾部
- 可添加头部尾部RecyclerView,很帅哦~