android - Kotlin中recyclerview项目点击事件是否需要接口?
问题描述
我正在尝试实现item click event
一个recyclerview
.
在Java
中,使用了创建用于单击项目的 in 、在 中实现它interface
并将an 传递给的典型方法。adapter
activity
anonymous object
adapter
但是,Kotlin
接受lambda expressions
并可以将它们作为arguments
.
所以我不一定需要使用 an interface
,是吗?
还是有充分的理由interfaces
尽可能多地使用?
解决方案
您可以使用高阶函数来完成此操作,而无需使用接口。
这是一个例子:
片段/活动
recycler_view_photos.adapter = PhotosAdapter {
actionAfterClickOnItem()
}
private fun actionAfterClickOnItem() {
//stuff
}
适配器
class PhotosAdapter(val onItemClicked: () -> Unit) {
//stuff
inner class PhotoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(photo: Photo) {
//stuff
itemView.setOnClickListener {
onItemClicked.invoke()
}
}
}
}
接口可以很好地在组件之间创建契约、为类指定类型以及创建事件,但是使用您提到的 Kotlin,您可以使用 lambda 并用更少的代码行做同样的事情。
推荐阅读
- r - ggplot:为什么 geom_ribbon 和 geom_line 都打印图例?
- javascript - React.js 在按钮按下时显示输出
- python - 如何将字典内列表中的字符串值转换为浮点数据类型?
- eclipse - eclipse 在使用 ctrl+e 或 ctrl+shift+R 转到文件时不突出显示 java 类型/额外信息
- android - 导航菜单未显示
- perl - 如何在 perl 中的变量之后使用变量
- python - 如何在 discord.py 消息中获取提及用户的 ID?
- qt - QtQuick Controls 2 中的新 TableView 是否支持不同的“角色”
- webpack - Webpack dist 构建 html 布局与开发不同
- python - 与 python 请求保持在同一页面上以解决验证码