本文主要是介绍BaseRecyclerAdapter之添加不同布局(头部尾部),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近写了个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];}@Overrideprotected int getDefItemViewType(int position) {if (position % 2 == 0)return TEXT_TYPE;return super.getDefItemViewType(position);} @Overrideprotected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) {if (viewType == TEXT_TYPE)return new TextViewHolder(getItemView(mTextLayoutResId, parent));return super.onCreateDefViewHolder(parent, viewType);}@Overrideprotected void onBindDefViewHolder(BaseViewHolder holder, String item) {if (holder instanceof TextViewHolder)holder.setText(R.id.tv, item); }@Overrideprotected 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()
在原本数据量上加上根据额外布局的数量,代码如下
@Overridepublic 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之添加不同布局(头部尾部)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!