欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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() 的内容,请参考 官方文档。