在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) {
.........
}
});
示意图如下(新的朋友和公司是头部):
参考: