recyclerview item点击事件无效(recyclerview复杂布局)
程序员文章站
2023-12-01 19:48:28
本文是介绍 recyclerview 入门 系列文章 的第三篇。如果您已经对创建 recyclerview 有了一定的认识,请继续阅读本文。如果尚未熟悉,建议您首先阅读本系列中的 第一篇文章。当使用...
本文是介绍 recyclerview 入门 系列文章 的第三篇。如果您已经对创建 recyclerview 有了一定的认识,请继续阅读本文。如果尚未熟悉,建议您首先阅读本系列中的 第一篇文章。
当使用 recyclerview 显示列表数据的时候,您可能需要响应列表元素的点击事件。该响应处理包括: 打开包含更多数据的页面、显示 toast、删除某个元素等等。相关的响应事件虽然数不胜数,但是它们均需要通过 onclick() 来实现。
定义点击动作
在创建监听器之前,在 activity 类中添加一个函数用于处理点击之后的响应操作。
<!-- copyright 2019 google llc.
spdx-license-identifier: apache-2.0 -->
private fun adapteronclick(flower: flower) {
val intent = intent(this, flowerdetailactivity()::class.java)
intent.putextra(flower_id, flower.id)
this.startactivity(intent)
}
接下来,修改 adapter 的构造函数来传入 onclick() 函数。
<!-- copyright 2019 google llc.
spdx-license-identifier: apache-2.0 -->
class flowersadapter(private val onclick: (flower) -> unit) :
listadapter<flower, recyclerview.viewholder>(flowerdiffcallback())
在 activity 类中,在初始化 adapter 的时候传入刚刚创建的点击事件函数。
<!-- copyright 2019 google llc.
spdx-license-identifier: apache-2.0 -->
val flowersadapter = flowersadapter { flower ->
adapteronclick(flower)
}
添加 onclickhandler()
现在响应处理已经定义好了,可以将它关联到 adapter 的 viewholder 了。
修改 viewholder,将 onclick() 作为参数传入。
<!-- copyright 2019 google llc.
spdx-license-identifier: apache-2.0 -->
class flowerviewholder(itemview: view, val onclick: (flower) -> unit) :
recyclerview.viewholder(itemview)
在初始化的代码中,调用 itemview 的 setonclicklistener{}。
<!-- copyright 2019 google llc.
spdx-license-identifier: apache-2.0 -->
init {
itemview.setonclicklistener {
currentflower?.let {
onclick(it)
}
}
}
搞定!现在您的 recyclerview 可以响应点击事件了。
编程快乐!
下一步
请查阅包含 onclick() 的 完整示例。
感谢您阅读 recyclerview 系列 文章的第三篇。请继续关注未来更多关于 recyclerview 的内容。
如果您想了解更多关于 onclick() 的内容,请参考 官方文档。