揭开RecyclerView的神秘面纱(二):处理RecyclerView的点击事件

前言

上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了RecyclerView的基本使用方法,不同的布局管理器而造成的多样化展示方式,展示了数据之后,一般都会与用户进行交互,因此我们需要处理用户的点击事件。在ListView和GridView提供了onItemClickListener这个监听器,然而我们查找RecyclerView的API却没有类似的监听器,因此我们需要自己手动处理它的点击事件。
以下提供两种方法来实现处理RecyclerView点击事件的功能,以下代码均基于上一篇文章的代码做出修改。

方法一:利用View.onClickListener及onLongClickListener

利用了java回调机制,这里我们依赖于子Item View的onClickListener及onLongClickListener。
首先对MyAdapter.java代码做出如下修改
①新建两个内部接口:

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

    public interface OnItemLongClickListener{
   
        void onItemLongClick(View view,int position);
    }

②新建两个私有变量用于保存用户设置的监听器及其set方法:

    private OnItemClickListener mOnItemClickListener;
    private OnItemLongClickListener mOnItemLongClickListener;

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

    public void setOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
        this.mOnItemLongClickListener = mOnItemLongClickListener;
    }

③在onBindViewHolder方法内,实现回调:

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    holder.mTextView.setText(mDataSet.get(position));
    //判断是否设置了监听器
    if(mOnItemClickListener != null){
        //为ItemView设置监听器
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = holder.getLayoutPosition(); // 1
                mOnItemClickListener.onItemClick(holder.itemView,position); // 2
            }
        });
    }
    if(mOnItemLongClickListener != null){
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int position = holder.getLayoutPosition();
                mOnItemLongClickListener.onItemLongClick(holder.itemView,position);
                //返回true 表示消耗了事件 事件不会继续传递
                return true;
            }
        });
    }
}

可以看到,这里实际上用到了子Item View的onClickListener和onLongClickListener这两个监听器,如果当前子item view被点击了,会触发点击事件进行回调,然后在①处获取当前点击位置的position值,接着在②号代码处进行再次回调ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值