参考文章:http://blog.csdn.net/guxiao1201/article/details/40423361
思路是:因为ViewHolder我们可以拿到每个Item的根布局,所以如果我们为根布局设置单独的OnClick监听并将其开放给Adapter,那不就可以在组装RecyclerView时就能够设置ItemClickListener,只不过这个Listener不是设置到RecyclerView上而是设置到Adapter。
1.设置item点击的接口
public interface MyRecyclerItemClickListener {
public void onItemClick(View view,int position);
}
2.写adapter的代码
public class ProjectSuggestListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private LayoutInflater mInflater;
private List<ProjectSuggestModel.ListEntity> list;
private MyRecyclerItemClickListener myRecyclerItemClickListener;
public ProjectSuggestListAdapter(Context context, List<ProjectSuggestModel.ListEntity> list) {
this.mInflater = LayoutInflater.from(context);
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.item_suggest_recycler, parent, false);
ItemViewHolder itemViewHolder = new ItemViewHolder(view,myRecyclerItemClickListener);
return itemViewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
((ItemViewHolder) holder).item_title.setText(list.get(position).getTitle());
((ItemViewHolder) holder).item_brief.setText(list.get(position).getBrief());
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return list.size();
}
public void setOnItemClickListener(MyRecyclerItemClickListener listener){
this.myRecyclerItemClickListener = listener;
}
public static class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView item_title;
public TextView item_brief;
private MyRecyclerItemClickListener myRecyclerItemClickListener;
public ItemViewHolder(View view,MyRecyclerItemClickListener myRecyclerItemClickListener) {
super(view);
item_title = (TextView) view.findViewById(R.id.item_title);
item_brief = (TextView) view.findViewById(R.id.item_brief);
this.myRecyclerItemClickListener = myRecyclerItemClickListener;
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if(myRecyclerItemClickListener != null){
myRecyclerItemClickListener.onItemClick(view,getPosition());
}
}
}
}
this.adapter.setOnItemClickListener(new MyRecyclerItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.show("item click");
}
});
同样点击的功能跟listview的onItemClickListener一样了。