Recyclerview添加点击事件

目的
实现如listview的点击事件的效果
原理
为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。而“为RecyclerView的每个子item设置setOnClickListener”在Adapter中设置。其实直接在onClick中也能完全处理item的点击事件,但是这样会破坏代码的逻辑。
第一步创建点击接口

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

**第二步声明接口

private OnItemClickListener mOnItemClickListener = null;

第三添加set方法

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

**第四实现将点击事件转移给外面的调用者:

implements View.OnClickListener

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

第五绑定点击事件

 @Override
    public HomeAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(
                context).inflate(R.layout.layout, parent,
                false);
        MyViewHolder holder = new MyViewHolder(inflate);
        //将创建的View注册点击事件
        inflate.setOnClickListener(this);
        return holder;
    }

第六 将position保存在itemView的Tag中,以便点击时进行获取

 @Override
    public void onBindViewHolder(HomeAdapter.MyViewHolder holder, int position) {
        holder.tv.setText(ad5.get(position).getTitle());
//        Glide.with(context).load(ad5.get(position).getImage()).into(holder.imageView);
//        https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/logo.png
        Uri uri = Uri.parse(ad5.get(position).getImg());
        holder.imageView.setImageURI(uri);
        //将position保存在itemView的Tag中,以便点击时进行获取
        holder.itemView.setTag(position);
    }

调用

adapter.setmOnItemClickListener(new HomeAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Log.e("aaa", "onItemClick: "+position );
            }
        });

完整adapter

import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.wyj.test.zhoukao2lx.R;
import com.wyj.test.zhoukao2lx.bean.ZKBean;

import java.util.List;

/**
 * Created by wangyajie on 2017/11/11.
 */

public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> implements View.OnClickListener{
    Context context;
    List<ZKBean.DataBean> ad5;
    private OnItemClickListener mOnItemClickListener = null;

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

    @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 HomeAdapter(Context context, List<ZKBean.DataBean> ad5) {
        this.context = context;
        this.ad5 = ad5;
    }

    @Override
    public HomeAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(
                context).inflate(R.layout.layout, parent,
                false);
        MyViewHolder holder = new MyViewHolder(inflate);
     //将创建的View注册点击事件
        inflate.setOnClickListener(this);
        return holder;
    }
    @Override
    public void onBindViewHolder(HomeAdapter.MyViewHolder holder, int position) {
        holder.tv.setText(ad5.get(position).getTitle());
        Uri uri = Uri.parse(ad5.get(position).getImg());
        holder.imageView.setImageURI(uri);
        //将position保存在itemView的Tag中,以便点击时进行获取
        holder.itemView.setTag(position);
    }

    @Override
    public int getItemCount() {
        return ad5.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tv;
        ImageView imageView;

        public MyViewHolder(View view) {
            super(view);
            tv = (TextView) view.findViewById(R.id.tv);
            imageView = (ImageView) view.findViewById(R.id.my_image_view);
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值