RecyclerView添加item的点击事件

步骤

adapter中

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

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

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

声明一个这个接口的变量


private OnItemClickListener mOnItemClickListener1 = null;


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



@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 onClick(View v) {
    if (mOnItemClickListener != null) {
        //注意这里使用getTag方法获取position
        mOnItemClickListener.onItemClick(v,(int)v.getTag());
    }
}



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


@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;
}


最后暴露给外面的调用者,定义一个设置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);
        }
    }

}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值