在上一篇博客Android RecyclerView使用(一)中介绍了一些基本用法,但是RecyclerView没有提供Item的点击事件,这里需要我们自己去实现。

方法一、直接在Adapter中的onBindViewHolder()方法中实现点击事件

@Override    public void onBindViewHolder(MyViewHolder viewHolder, final int postion) {        viewHolder.textView.setText(mDatas.get(postion));        viewHolder.rootView.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View arg0) {                // 点击事件                Toast.makeText(mContext, postion + "", 1000).show();            }        });    }

方法二、

1、自定义一个接口。

public interface OnItemClickListener {    public void onItemClick(View view, int postion);}

2、在自定义的ViewHolder中实现onClickListenr接口,先声明一个自定义接口的变量,在自定义的ViewHolder的构造函数中添加一个参数-自定义的这个接口,并设置itemview的点击事件,在点击事件中转移到自定义的接口上,传到外面的调用者。

/** * 自定义的ViewHolder继承自android.support.v7.widget.RecyclerView.ViewHolder *  * @author raphets * */public class MyViewHolder extends ViewHolder implements OnClickListener {    TextView textView;    private OnItemClickListener mListener;// 声明自定义的接口    // 构造函数中添加自定义的接口的参数    public MyViewHolder(View itemView, OnItemClickListener listener) {        super(itemView);        mListener = listener;        // 为ItemView添加点击事件        itemView.setOnClickListener(this);        textView = (TextView) itemView.findViewById(R.id.textView);    }    @Override    public void onClick(View v) {        // getpostion()为Viewholder自带的一个方法,用来获取RecyclerView当前的位置,将此作为参数,传出去        mListener.onItemClick(v, getPosition());    }}

3、在自定义的Adapter中定义一个方法public void setOnItemClickListener(OnItemClickListener listener) {this.mClickListener = listener;}并暴露给外面的调用者

MyRecylerViewAdapter

public class MyRecylerViewAdapter extends Adapter {    private Context mContext;    private List mDatas;    private OnItemClickListener mClickListener;    public MyRecylerViewAdapter(Context context, List datas) {        this.mContext = context;        this.mDatas = datas;    }    @Override    public int getItemCount() {        return mDatas.size();    }    @Override    public void onBindViewHolder(MyViewHolder arg0, int arg1) {        final int pos = arg1;        arg0.textView.setText(mDatas.get(arg1));    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {        View view = LayoutInflater.from(mContext).inflate(R.layout.item, arg0, false);        MyViewHolder holder = new MyViewHolder(view,mClickListener);        return holder;    }    public void setOnItemClickListener(OnItemClickListener listener) {        this.mClickListener = listener;    }}

4、在MainActivity中使用

adapter.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(View view, int postion) {                Toast.makeText(MainActivity.this, postion+"", 1000).show();            }        });

方法三、修改RecyclerView源码,在里面实现点击事件,这里我就不说了。

可参考http://blog.csdn.net/jwzhangjie/article/details/36868515

点击下载源码

更多相关文章

  1. 给学android的同学们的一些建议【III】
  2. android 温故知新之fragment中易忽视的onViewStateRestored()
  3. Android中打开新的Activity的三种方法
  4. Android(安卓)实用开源项目集合 持续更新
  5. findViewById()
  6. [干货] Android(安卓)深入浅出 Activity 生命周期(二)
  7. Android(安卓)SDK 安装中组件的离线安装方法 (share)
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. App 权限一点知识
  2. Android(安卓)Map开发基础知识学习笔记(
  3. Android(安卓)AndroidManifest.xml文件的
  4. Android(安卓)搭建环境配置
  5. Android(安卓)Pitfall - Fragment.startA
  6. 获取Android设备电池电量状态
  7. Android解析XML
  8. android camera(一):camera模组CMM介绍
  9. android中GridView关于间距的属性值介绍
  10. Android(安卓)屏幕适配