在listview中我们可以很方便的增加头部view,但是RecyclerView并没有给我们提供相应的方法,而且比较坑的一点,RecyclerView没有提供ItemClickListener方法,需要我们自己去实现,既然RecyclerView提供了灵活性,那么有些事情就需要我们自己去实现了。
一、增加头部view
其实我这里实现方法是直接把头部放在RecyclerView的item,因为我这里的头部布局和一般item的布局是一样的,但是一些功能不一样;如果布局不一样的话,通过viewType去区分。
先定义头部item数量:
private int headerCount = 2; // 头部个数实现getItemViewType方法,这个方法帮助我们区分是否头部: @Override public int getItemViewType(int position) { if (position < headerCount) return HEADER_TYPE; else return NORMAL_TYPE; }在onCreateViewHolder是实现各自的布局,通过viewType来区分是否头部,但是我这里的头部布局和一般item的布局是一样的,所以不需要区分布局: @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ContactViewHolder(LayoutInflater.from(context).inflate(R.layout.contact_rv_item, parent, false)); }数据绑定: @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { final int finalPosition = position; ContactViewHolder holder = ((ContactViewHolder)viewHolder); if (getItemViewType(position) == HEADER_TYPE) { // 头部 ......... } else { // 非头部 ......... } }二、增加单击回调增加一个回调接口:
public interface ContactRecyclerItemListener { void onClick(int position); }监听item的单击事件并回调: viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mItemListener != null) { // 单击回调 mItemListener.onClick(finalPosition); } } });在activity中增加回调监听: mContactAdapter.setContactRecyclerItemListener(new ContactAdapter.ContactRecyclerItemListener() { @Override public void onClick(int position) { ......... } });示意图如下(新的朋友和公司是头部):
参考:
http://www.jb51.net/article/80672.htm
