RecycleView的item点击事件,本次的例子是借助在别人的demo上增加了item的点击事件:
因为代码比较多,所以用别人的代码,做了一下改动,源码地址http://blog.csdn.net/qq199208/article/details/49386827:
看效果,点击头部
点击通知位置在2,从0开始中间自定义了分割线,也算item
知道了位置我们就可以就行单击跳转工作:
改动之处
适配器,首先适配器要实现接口OnClickListener,并实现里面的方法,接着就是在适配器里面写一个借口:
private OnRecyclerViewItemClickListener mOnItemClickListener = null;
//define interface
public static interface OnRecyclerViewItemClickListener {
void onItemClick(View view, int position);
}
同时在onCreateViewHolder()增加view.setOnClickListener(this);每种类型都写
//创建viewholder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//如果是头像区类型,则创建CenterHeadViewHolder类型的viewHolder
if (viewType == ITEM_TYPE.ITEM_TYPE_HEAD.ordinal()) {
//解析相对应的布局
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.center_head, null);
CenterHeadViewHolder viewHolder = new CenterHeadViewHolder(view);
view.setOnClickListener(this);
return viewHolder;
}
onBindViewHolder()方法绑定数据,我们要传出来一个position,就用到setTag()方法:
//绑定数据
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
//如果holder是CenterHeadViewHolder 的实例
if (holder instanceof CenterHeadViewHolder) {
CenterHeadItem centerHeadItem = (CenterHeadItem) mData.get(position).getT();
//viewholder中参数要定义成public,要不不同包访问不到
((CenterHeadViewHolder) holder).mCircleImageView.setImageResource(centerHeadItem.getImg());
((CenterHeadViewHolder) holder).mTextView.setText(centerHeadItem.getName());
((CenterHeadViewHolder) holder).itemView.setTag(position);
}
在OnClickListener实现的方法中传入position
@Override
public void onClick(View view) {
if (mOnItemClickListener != null){
mOnItemClickListener.onItemClick(view, (Integer) view.getTag());
}
}
public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
剩下的就是在Activity中或者Fragment中设置点击事件了:
mRecyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(new CenterRecycleViewAdapter.OnRecyclerViewItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(getActivity(),"单击了"+position,Toast.LENGTH_LONG).show();
switch (position){
//有了位置我们就可以实现跳转了,跳转内容就不写了
//当然这些数字只适用我的工程中
case 0:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 6:
break;
case 7:
break;
case 9:
break;
case 10:
break;
}
}
});