BaseRecyclerAdapter之添加不同布局(头部尾部)
2016-04-22 00:37
471 查看
最近写了个Android开源库「BaseRecyclerViewAdapterHelper」集成了很多常见需求的解决方案,希望大家多多star哦~!
- 重写getItemViewType()方法,根据需求规则给出不同的type值。
- 在onCreateViewHolder()方法里面根据不同的type来创建不同的ViewHolder
- 在onBindViewHolder()里面根据不同holder的类型来赋予相对于的数据
- 如果有额外布局(如:头部尾部)需要修改getItemCount()方法的返回数量
2.type搞定了,接下来就是调用
3.然后再接下来调用
注意:如果是添加头部
那就必须在原
国际友人的加盟!
每次收获一点点,后续还会扩展更多功能,供大家使用及学习「BaseRecyclerViewAdapterHelper」。
效果如何?
如何使用?
多个不同布局
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」。
相关文章推荐
- cursor 与refcursor及sys_refcursor的区别 (转载)
- 如何在本 987f 地预览php文件
- (LeetCode 16) 3Sum Closest
- HDOJ(HDU) 1718 Rank(水题、、、)
- CSS动画原理及硬件加速
- HDOJ(HDU) 1718 Rank(水题、、、)
- Eclipse 快捷键
- 覆盖率工具-jacoco 集成进jenkins
- 杭电2023 求平均成绩
- 【C++】static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- 杭电1872稳定排序
- leetcode: Pascal's Triangle | Java最短代码实现
- mac上设置xampp服务器
- 基于spring test框架进行单元测试-框架介绍
- 关于<script/>
- 深入HTTP协议
- 2015-2016 下半学期 第六周 训练
- Java多线程——sleep(),wait(),notify(),notifyAll(),join()
- [改善Java代码]推荐使用枚举定义常量
- 个人工作总结4