整理了一下RecyclerView的点击事件的实现方法:
效果图:
首先在adapter 中定义接口,模拟ListView的OnItemClickListener:
void onItemClick(View view, int position);
}
声明一个这个接口的变量: private OnRecyclerViewItemClickListener onItemClickListener;
在onCreateViewHolder()中为每个item添加点击事件
public SecondAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
inflater=LayoutInflater.from(parent.getContext());
View view=inflater.inflate(R.layout.item,null);
view.setOnClickListener(this);
return new ViewHolder(view);
}
将点击事件转移给外面的调用者:
@Override
public void onClick(View view) {
if (onItemClickListener != null) {
//注意这里使用getTag方法获取数据
onItemClickListener.onItemClick(view, (Integer) view.getTag());
}
}
注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item相关的数据
@Override
public void onBindViewHolder(final SecondAdapter.ViewHolder holder, final int position) {
holder.name.setText(mlist.get(position));
holder.itemView.setTag(mlist.get(position));
if(onItemClickListener != null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.onItemClick(holder.itemView, position);
}
});
}
}
最后暴露给外面的调用者,定义一个设置Listener的方法():
public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
this.onItemClickListener = listener;
}
在Activity中使用:
adapter.setOnItemClickListener(new SecondAdapter.OnRecyclerViewItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MethodTwo.this, mlist.get(position), Toast.LENGTH_SHORT).show();
}
});
代码传送门:http://download.csdn.net/detail/u010007428/9730762