RecyclerView添加点击事件
前言
自从recyclerView发布以来,一直独得开发者的恩宠,因为它的优点很多,例如:高度的交互性,灵活性,可以利用它来创建多种类型的布局,而且它注重的是view的回收和利用,所以,在使用程度上远胜listview,但是,凡事都有两面性,例如它没有自己的点击的方法,今天就来学习下怎么为自己的recyclerView添加点击事件
一: 添加引用
dependencies { ... compile 'com.android.support:recyclerview-v7:21.0.+' }
二:编写Adapter
public PersonAdapter extends RecyclerView.Adapter<MyHolder>{ //数据源 private List<Map<String, Object>> list; //引用的布局 private LayoutInflater mInflater; //这里就是我们需要的监听 private MyItemClickListener mItemClickListener;
//构造方法,这里要把监听方法引入
public PersonAdapter(Context context, List<Map<String, Object>> list, MyItemClickListener listener) { this.mInflater = LayoutInflater.from(context); this.list = list; this.mItemClickListener = listener; }
//创建布局
@Overridepublic MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View convertView = mInflater.inflate(R.layout.person_item, parent, false); return new MyHolder(convertView, mItemClickListener); }
//绑定数据
@Override public void onBindViewHolder(final MyHolder holder, final int position) { //这里是数据源 }
//返回的数据长度
@Overridepublic int getItemCount() { return list.size(); } }
//定义一个监听的接口
interface MyItemClickListener { void onItemClick(View view, int position); }
//这里就是我们的Holder并且实现OnClickListener
class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener { ImageView image; TextView title; TextView content; ImageView info; private MyItemClickListener mListener; //构造方法中需要传入我们的监听接口 public MyHolder(View itemView, MyItemClickListener mListener) { super(itemView); this.mListener = mListener; if (mListener != null) { itemView.setOnClickListener(this); } image = (ImageView) itemView.findViewById(R.id.iv_title_name); title = (TextView) itemView.findViewById(R.id.tv_title); content = (TextView) itemView.findViewById(R.id.tv_content); info = (ImageView) itemView.findViewById(R.id.iv_expansion); } @Override public void onClick(View v) { if (mListener != null) { mListener.onItemClick(v, getPosition()); } } }
三:添加到布局,并且在界面中调用
在界面中需要实现监听的接口implements MyItemClickListener并实现里面的方法,监听的事件就可以在里面操作
@Override public void onItemClick(View view, int position) { //这里是监听操作 }
//引用RecyclerView
mRecyclerView =(RecyclerView)findViewById(R.id.my_recycler_view); //创建默认的线性LayoutManager mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 mRecyclerView.setHasFixedSize(true); //创建并设置Adapter mAdapter = new PersonAdapter(mContext,list,PersonFragment.this); mRecyclerView.setAdapter(mAdapter);
xml布局:
<android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical"/>
虽然RecyclerView没有像listview那样有自己的监听方法,但我们完全可以自己去实现,网上的方法很多,希望多参考别人的方法。在RecyclerView的API中有个addOnItenTouchListener()的方法,就是通过手势来识别点击事件,然后通过坐标来识别点击的Item,一样可以做到点击监听。