recyclerview item点击事件

recyclerview早就不陌生了,比起过去传统的listView,样式更多,也较为高效一点,这里整理一下recylerview中item的点击事件。

 

recyclerview和listView不同的地方,在于RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件,那么要想实现点击或是长按事件,就需要开发者自己来实现。

 

这里实现的方式也是网上大部分的实现方式,很方便:在ViewHolder中实现点击监听,而具体的点击处理事件有Adapter在绑定viewholder时传入,同时,在Adapter中暴露方法,可以在使用Adapter的地方,传入实例化的点击事件。这样,就需要新建一个借口,所有自定义的点击事件都继承该借口。具体流程如下:

 

(不擅于画图,凑合看吧)

 

那么具体的实现如下:

 

1、定义接口:

public interface MyItemOnClickListener {
    public void onItemOnClick(View view,int postion);
}

在接口中,定义接口方法onItemOnClick方法,在里面实现具体的点击响应事件,同时传入两个参数:view和postion。和ListView中item的点击一样。

 

2、在ViewHolder中实现单击监听:

 class FMListHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        TextView textView;

        MyItemOnClickListener mListener;
        public FMListHolder(View itemView,MyItemOnClickListener myItemOnClickListener) {
            super(itemView);
            textView= (TextView) itemView.findViewById(R.id.id_item_text);
            this.mListener=myItemOnClickListener;

            itemView.setOnClickListener(this);
        }


        @Override
        public void onClick(View view) {
            if(mListener!=null){
                mListener.onItemOnClick(view,getPosition());
            }
        }
    }

上面的代码就是ViewHolder,在itemView或是里面包含的子View实现setOnClickListener,在OnClick中接受接口实例化传入的具体处理事件,即mListener。在这里也能看的出来,只有viewholder中可以实现点击监听。

 

3、在Adapter中绑定ViewHolder时传入接口实例化后的类

@Override
    public FMListAdapter.FMListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        FMListHolder fmListHolder=
                new FMListHolder(LayoutInflater.from(mContext).inflate(R.layout.item_fm_list,parent,false)
                ,mMyItemOnClickListener);
        return fmListHolder;
    }

看的出,在新建ViewHoler的过程中,传入了参数 mMyItemOnClickListener,该参数肯定在实现Adapter的地方传入Adapter中,所以要在Adapter中对外暴露方法:

public void setItemOnClickListener(MyItemOnClickListener listener){
        mMyItemOnClickListener=listener;
    }

4、在实现Adapter的地方实现具体点击事件

mAdapter.setItemOnClickListener(new MyItemOnClickListener() {
            @Override
            public void onItemOnClick(View view, int postion) {
                Log.e(TAG,postion+"");
            }
        });

其实就是在使用RecyerView的地方,调用Adapter暴露的方法,将MyItemOnClickListener实例化话,并在方法onItemOnClick中实现事件,这里只是打印Log。

这个博客很基础,就不粘贴全部的代码了。不懂的可以留言给我。


 

 

 

不是闷骚的程序员算不上程序员。我的微信公众号“那点鼻事”,在这里周一到周五每天一篇文章,与技术无关,只哈牛逼。

 

 

转载于:https://www.cnblogs.com/YaoJianXun/p/6410350.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值