今天尝试了为recycleview增加headview
重写的viewHolder 代码
public class RecyclerVH extends RecyclerView.ViewHolder { ImageView imageView; TextView textView; public int mPosition; public Context context; public RecyclerVH(View itemView, final RecycleAdapter.OnItemClickListener onItemClickListener,int i) { super(itemView); if(i==1) { return; } imageView= (ImageView) itemView.findViewById(R.id.img); textView= (TextView) itemView.findViewById(R.id.describe); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(null!=onItemClickListener) { onItemClickListener.onItemClick(mPosition); } } }); } }
重写的recyclerviewAdapter 代码:
public class RecycleAdapter extends RecyclerView.Adapter<RecyclerVH> { public static final int TYPE_HEADER = 0; public static final int TYPE_NORMAL = 1; private List<DisplayGoods> listGoods; private Context context; private OnItemClickListener onItemClistListener; private View mHeaderView; public void setHeaderView(View headerView) { mHeaderView = headerView; notifyItemInserted(0); } public View getHeaderView() { return mHeaderView; } public void addDatas( List<DisplayGoods> datas) { listGoods.addAll(datas); notifyDataSetChanged(); } @Override public int getItemViewType(int position) { if(mHeaderView == null) return TYPE_NORMAL; if(position == 0) return TYPE_HEADER; return TYPE_NORMAL; } /* */ public RecycleAdapter(List<DisplayGoods> listGoods, Context context) { this.listGoods = listGoods; this.context = context; } @Override public RecyclerVH onCreateViewHolder(ViewGroup parent, int viewType) { if(mHeaderView != null && viewType == TYPE_HEADER) return new RecyclerVH(mHeaderView,onItemClistListener,1); View view=View.inflate(parent.getContext(), R.layout.view_recycler,null); return new RecyclerVH(view,onItemClistListener,0); } @Override public void onBindViewHolder(RecyclerVH holder, int position) { if(getItemViewType(position) == TYPE_HEADER) return; final int pos = getRealPosition(holder); holder.context=context; holder.mPosition=pos; Picasso.with(context).load(Url.BASE_URL+"/MyApp/pics/"+listGoods.get(pos).getImgSrc()).into(holder.imageView); holder.textView.setText(listGoods.get(pos).getDescribe()); } public int getRealPosition(RecyclerVH holder) { int position = holder.getLayoutPosition(); return mHeaderView == null ? position : position - 1; } @Override public int getItemCount() { if(null==listGoods) return 0; return mHeaderView == null ? listGoods.size() : listGoods.size() + 1; } @Override public void onViewAttachedToWindow(RecyclerVH holder) { super.onViewAttachedToWindow(holder); ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); if(lp != null && lp instanceof StaggeredGridLayoutManager.LayoutParams && holder.getLayoutPosition() == 0) { StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp; p.setFullSpan(true); } } public interface OnItemClickListener { void onItemClick(int postion); } public void setOnItemClistListener(OnItemClickListener itemClistListener) { this.onItemClistListener = itemClistListener; } }接口
onItemClistListener 是实现点击每个item后的功能
不过我现在尝试点击headview 并没有实现接口回调 该怎么实现??