RecyclerView添加item的点击事件

来源:互联网 发布:淘宝卖家收款到哪 编辑:程序博客网 时间:2024/06/05 04:36

步骤

adapter中

自定义一个继承自RecyclerView.Adapter的MyAdapter。

1.在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener

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

声明一个这个接口的变量


private OnItemClickListener mOnItemClickListener1 = null;


在onCreateViewHolder()中为每个item添加点击事件



@Overridepublic MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {    View view = View.inflate(context, R.layout.item1_t, null);    myHolder = new MyHolder(view);    //将创建的View注册点击事件    view.setOnClickListener(this);    return myHolder;}


将点击事件转移给外面的调用者:


@Overridepublic void onClick(View v) {    if (mOnItemClickListener != null) {        //注意这里使用getTag方法获取position        mOnItemClickListener.onItemClick(v,(int)v.getTag());    }}



注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item的position


@Overridepublic MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {    View view = View.inflate(context, R.layout.item1_t, null);    myHolder = new MyHolder(view);    //将创建的View注册点击事件    view.setOnClickListener(this);    return myHolder;}


最后暴露给外面的调用者,定义一个设置Listener的方法():


public void setOnItemClickListener(OnItemClickListener listener) {    this.mOnItemClickListener = listener;}


以上所有步骤都发生在自定义的adapter中,典型的观察者模式,有点绕的地方在于,这里涉及到两个观察者模式的使用,view的setOnClickListener本来就是观察者模式,我们将这个观察者模式的事件监听传递给了我们自己的观察者模式。

在Activity中使用    这是做项目中的传值

rec.setOnItemClickListener(new ReclerAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Bundle bundle = new Bundle();                Intent intent = new Intent(getActivity(), XiangQingjieMian.class);                String img_t = list_t.get(position).getImages();                String title = list_t.get(position).getTitle();                String price=list_t.get(position).getPrice()+"";                bundle.putString("img_t",img_t);                bundle.putString("title",title);                bundle.putString("price",price);                intent.putExtras(bundle);                getActivity().startActivity(intent);            }        });    }});


完整代码

MyAdapter.java



package com.example.samsung.jddemo.Adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.example.samsung.jddemo.Bean.Grid_Bean2;import com.example.samsung.jddemo.R;import java.util.List;import it.sephiroth.android.library.picasso.Picasso;/** * Created by samsung on 2017/11/13. */public class ReclerAdapter extends RecyclerView.Adapter<ReclerAdapter.MyHolder> implements  View.OnClickListener{    private OnItemClickListener mOnItemClickListener1 = null;    private List<Grid_Bean2.TuijianBean.ListBean> list_t;    private Context context;    private MyHolder myHolder;    private OnItemClickListener mOnItemClickListener = null;    @Override    public void onClick(View v) {        if (mOnItemClickListener != null) {            //注意这里使用getTag方法获取position            mOnItemClickListener.onItemClick(v,(int)v.getTag());        }    }    public static interface OnItemClickListener {        void onItemClick(View view , int position);    }    public ReclerAdapter(Context context, List<Grid_Bean2.TuijianBean.ListBean> list_t) {        this.context = context;        this.list_t = list_t;    }    @Override    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = View.inflate(context, R.layout.item1_t, null);        myHolder = new MyHolder(view);        //将创建的View注册点击事件        view.setOnClickListener(this);        return myHolder;    }    @Override    public void onBindViewHolder(MyHolder holder, int position) {        String images = list_t.get(position).getImages();        String[] split = images.split("\\|");        String imgurl = split[0];        myHolder.textView.setText(list_t.get(position).getTitle());        Picasso.with(context).load(imgurl).into(holder.imageView);        //将position保存在itemView的Tag中,以便点击时进行获取        myHolder.itemView.setTag(position);    }    public void setOnItemClickListener(OnItemClickListener listener) {        this.mOnItemClickListener = listener;    }    @Override    public int getItemCount() {        return list_t == null ? 0 : list_t.size();    }    public class MyHolder extends RecyclerView.ViewHolder {        private final ImageView imageView;        private final TextView textView;        public MyHolder(View itemView) {            super(itemView);            imageView = (ImageView) itemView.findViewById(R.id.t_img);            textView = (TextView) itemView.findViewById(R.id.tv_t);        }    }}



原创粉丝点击