Android 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<MyViewHolder> {
    private Context mContext;
    private List<String> mDatas;
    private OnItemClickListener mClickListener;

    public MyRecylerViewAdapter(Context context, List<String> 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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值