public class HeaderBottomAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private String TAG = HeaderBottomAdapter.class.getSimpleName(); //item类型 public static final int ITEM_TYPE_HEADER = 0; public static final int ITEM_TYPE_CONTENT = 1; public static final int ITEM_TYPE_BOTTOM = 2; Context context; LayoutInflater mLayoutInflater; //模拟数据 List<String> list; private int mHeaderCount = 1;//头部View个数 private int mBottomCount = 0;//底部View个数 public HeaderBottomAdapter(Context context, List<String> list) { this.context = context; mLayoutInflater = LayoutInflater.from(context); this.list = list; } // 内容长度 public int getContentItemCount() { return list.size(); } /** * 判断当前item是否是headview * * @param position * @return */ public boolean isHeaderView(int position) { return mHeaderCount != 0 && position < mHeaderCount; } /** * 判断当前item是否是FooterView * * @param position * @return */ public boolean isBottomView(int position) { return mBottomCount != 0 && position >= (mHeaderCount + getContentItemCount()); } @Override public int getItemViewType(int position) { // return ITEM_TYPE_HEADER; int dataItemCount = getContentItemCount(); if (mHeaderCount != 0 && position < mHeaderCount) { LogUtils.d(TAG,"getItemViewType 1"); return ITEM_TYPE_HEADER; } else if (mBottomCount != 0 && position >= (mHeaderCount + dataItemCount)) { //底部View LogUtils.d(TAG,"getItemViewType 2"); return ITEM_TYPE_BOTTOM; } else { //内容View LogUtils.d(TAG,"getItemViewType 3"); return ITEM_TYPE_CONTENT; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_TYPE_HEADER) { return new HeaderViewHolder(mLayoutInflater.inflate(R.layout.rv_header, parent, false)); } else if (viewType == ITEM_TYPE_BOTTOM) { return new FooterViewHolder(mLayoutInflater.inflate(R.layout.rv_footer, parent, false)); } else if (viewType == ITEM_TYPE_CONTENT) { return new ContentViewHolder(mLayoutInflater.inflate(R.layout.rv_item, parent, false)); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof HeaderViewHolder) { } else if (holder instanceof FooterViewHolder) { } else { ((ContentViewHolder) holder).textView.setText(list.get(position - mHeaderCount)); } } @Override public int getItemCount() { return mBottomCount + mHeaderCount + getContentItemCount(); } /** * 内容的viewHolder */ public static class ContentViewHolder extends RecyclerView.ViewHolder { TextView textView; public ContentViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.tv_item_text); } } /** * 头部的viewHolder * 不对内部做处理,只显示 */ public static class HeaderViewHolder extends RecyclerView.ViewHolder { public HeaderViewHolder(View itemView) { super(itemView); } } /** * 根viewHolder */ public static class FooterViewHolder extends RecyclerView.ViewHolder { public FooterViewHolder(View itemView) { super(itemView); } } }
这里出现的问题是RecyclerView调用该adapter的时候,无法出现headview,
原因是外层套用了PtrClassicFrameLayout出现了冲突