kotlin——recyclerview 中的 item 点击事件(lambda 表达式)

该博客介绍了如何使用 Kotlin 的 lambda 表达式简洁地处理 RecyclerView 中的 item 点击事件,对比了 Java 中的接口实现方式,并探讨了进一步的简化技巧,包括通过变量处理和处理多个参数的情况。

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

使用 kotlin 实现 recyclerview 的条目点击事件(lambda 表达式)

首先看一下类 Java 的实现方式

自定义接口从而实现点击事件的处理

// 定义一个接口,用接口的形式来处理点击事件
interface OnItemClickListener {
	fun onItemClick(pos: Int)
	}

// 自定义一个 Adapter 类
class ItemAdapter() {
	var mOnItemClickListener: OnItemClickListener? = null

    fun setOnItemClickListener(onItemClickListener: OnItemClickListener){
        mOnItemClickListener = onItemClickListener
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
            mOnItemClickListener?.onItemClick(position)      
    }
	
}


// 接着在 Activity 中使用
class ItemActivity() {

	var adapter = SomeListAdapter(context)
	adapter.setOnItemClickListener ( object: ArticleListAdapter.Companion.OnItemClickListener {
                override fun onItemClick(pos: Int) {
                    // do something
                }
            })

}

然后使用 kotlin 的简单方法

kotlin 对于 item 的点击事件,抛弃了接口的概念,使用的是 lambda 表达式

class ItemAdapter() {

	lateinit var onItemClick: (Int) -> Unit

	fun setOnItemClickListener(onItemClick: (Int) -> Unit) {
        this.onItemClick= onItemClick
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
        itemView.setOnClickListener {
            onItemClick.invoke(position)
        }
    }

}


class ItemActivity() {

	var adapter = SomeListAdapter(context)
	adapter.setOnItemClickListener {
		// do something
	}

}

当然,我们还可以继续简化

既然都简化了,那干脆直接使用变量来处理
另外,还可以加上处理两个或多个参数的情景

class ItemAdapter() {

	lateinit var onItemClick: (v: View, pos: Int) -> Unit

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
        itemView.setOnClickListener {
            onItemClick.invoke(it, position)
        }
    }

}


class ItemActivity() {

	var adapter = SomeListAdapter(context)
	adapter.onItemClick = { v, pos ->
		// do something
	}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值