version:2.8.5
更多分享请看:http://cherylgood.cn
今天我们来分析下BaseQuickAdapter是如何实现BaseViewHolder的可扩展性的。
看代码
public abstract class BaseQuickAdapter<T, K extends BaseViewHolder> extends RecyclerView.Adapter<K> {
从类的定义我们可以看到两个范型类型T、K,T是我们的数据源的类型,K就是我们的viewHolder了,你可以使用已提供好的BaseViewHolder,也可以通过继承BaseViewHolder来进行扩展。
接下来我们分析的入口点就是代码中是如何创建ViewHolder的。ViewHolder的创建是在onCreateViewHolder生命回调方法中调用的,我们来看源码:
@Override
public K onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG,"#test onCreateViewHolder");
K baseViewHolder = null;
this.mContext = parent.getContext();
this.mLayoutInflater = LayoutInflater.from(mContext);
switch (viewType) {
case LOADING_VIEW:
baseViewHolder = getLoadingView(parent);
break;
case HEADER_VIEW:
baseViewHolder = createBaseViewHolder(mHeaderLayout);
break;
case EMPTY_VIEW:
baseViewHolder = createBaseViewHolder(mEmptyLayout);
break;
case FOOTER_VIEW:
baseViewHolder = createBaseViewHolder(mFooterLayout);
break