RecyclerView多种方法为Adapter设置点击事件

本文介绍了为RecyclerView的Adapter设置点击事件的三种方式:在Adapter内部单独设置,通过自定义接口,以及利用回调如RxJava、LiveData。分别阐述了每种方法的实现思路和适用场景,帮助开发者更好地管理RecyclerView的交互逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:在Adapter单独设置

AdapteronCreateViewHolder或者onBindViewHolder单独为每个组件设置点击事件,两处都可以,但推荐在onBindViewHolder实现。

方法二:提供自定义接口

上一种方法有一个明显的缺点:如果点击的逻辑需要在Activity或者Fragment使用就会变得麻烦,比如长按弹出一个Dialog然后进行逻辑处理,这种情况下把逻辑放在Adapter绝对不是明智之选。

实现思路:在Adapter提供接口,由外部实现


  1. 首先在Adapter声明一个接口,里面提供等待实现的回调函数
  2. 声明一个延迟初始化接口变量
  3. 设置一个函数用以设置接口(用来给第二步的变量赋值)
  4. 通过view自带的setOnClickListenersetOnLongClickListener的回调函数调用接口的函数,实现回调的效果。实现哪种按照需求,这里我同时实现了两个。
  5. 最后一步,调用自定义的setOnItemClickListener并实现自己的回调逻辑
/*为节省篇幅,删去了无关代码*/
/*adapter类*/{
    /*步骤2的接口变量*/
    private lateinit var onItemClickListener: OnItemClickListener

    /*调用接口回调*/
    override fun onBindViewHolder(holder: mViewHolder, position: Int) {
        /*步骤4,实现接口回调*/
        if (this::onItemClickListener.isInitialized)/*判断lateinit var是已经初始化*/
            onItemClickListener.let {
                holder.cell.apply {
                    setOnClickListener {
                        onItemClickListener.onClick(it, position)
                    }
                    setOnLongClickListener {
                        onItemClickListener.onLongClick(it, position)
                        true
                    }
                }
            }
    }

    /*步骤3的函数*/
    fun setOnItemClickListener(onItemClickListener: OnItemClickListener){
        this.onItemClickListener=onItemClickListener
    }

    /*步骤1的接口*/
    interface OnItemClickListener {
        fun onClick(view: View, position: Int)
        fun onLongClick(view: View, position: Int)
    }
}
/*adapter外实现接口*/
madapter.setOnItemClickListener(object :ChannelAdapter.OnItemClickListener{
            override fun onClick(view: View, position: Int) {
            }
            override fun onLongClick(view: View, position: Int) {
            }
        })

方法三:使用回调

可以使用RxJava、LiveData等……思路和上一种方法相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值