Android技术分享交流区Android知识

RecyclerView 添加item点击事件

2016-12-27  本文已影响993人  曾经的追风少年

在开发中,RecyclerView以其灵活的布局等特性逐渐替代了ListView和GridView。但是RecyclerView自身并没有item的点击事件监听。这就需要我们自己去设置监听了。

原理:

为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。

1、声明一个接口(这里使用了泛型,方便通用;也可指定数据的类型),模拟了ListView的OnItemClickListener,声明onClick方法 和 onLongClick方法,分别对应 点击事件和 长按事件。

public interface OnItemClickCallback<T> {
    // 点击事件
    void onClick(View view , T info);
    // 长按事件
    void onLongClick(View view , T info);
}

2、在adapter中申明一个该接口变量

// item条目布局注入器
private LayoutInflater mInflater;
// 申明一个点击事件接口变量
private OnItemClickCallback callback = null;

并在构造方法中,传入实例,用来将点击事件转移给外面的调用者。

public MyAdapter(Context ctx, OnItemClickCallback clickCallback){
    this.mInflater = LayoutInflater.from(mContext);
    this.callback = clickCallback;
}

在onBindViewHolder方法中将点击事件转移给外面的调用者:

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    // 给item中的指定控件添加点击事件(可以是item的子控件,也可以是itemView本身)
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            callback.onClick(view,jsList.get(position));
        }
    });
}

在Activity中使用

RecyclerView.LayoutManager manager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
myRecycler.setLayoutManager(manager);
// OnItemClickCallback<JsInfo>这里指定数据类型(一般为item的数据模型)
myAdapter= new MyAdapter(this, new OnItemClickCallback<JsInfo>() {
    @Override
    public void onClick(View view, JsInfo info) {
        Toast.makeText(this,"点击了"+info.getName(),Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLongClick(View view, JsInfo info) {
        Toast.makeText(this,"长按了"+info.getName(),Toast.LENGTH_SHORT).show();
    }
});
myAdapter.setJsData(mDataList);
myRecycler.setAdapter(myAdapter);

效果图

由于没有添加分割线,界面比较难看。添加分割线点击http://www.jianshu.com/p/fe41428ca2f3

点击item的效果图.png
上一篇 下一篇

猜你喜欢

热点阅读