本文是关于RecyclerView的介绍性文章系列的第三篇。如果您已经对创建RecyclerView有所了解,请继续阅读本文。如果你不熟悉,建议你先看这个系列的第一篇文章。
使用RecyclerView显示列表数据时,可能需要响应列表元素的click事件。响应处理包括:打开包含更多数据的页面、显示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)}
接下来,修改适配器的构造函数以传入onClick()函数。
<!-- Copyright 2019 Google LLC. SPDX-License-Identifier: Apache-2.0 -->class FlowersAdapter(private val onClick: (Flower) -> Unit) : ListAdapter<Flower, RecyclerView.ViewHolder>(FlowerDiffCallback())
在Activity类中,新创建的click事件函数在适配器初始化时被传入。
<!-- Copyright 2019 Google LLC. SPDX-License-Identifier: Apache-2.0 -->val flowersAdapter = FlowersAdapter { flower -> adapterOnClick(flower)}
添加onClickHandler()
既然已经定义了响应处理,您可以将它与适配器的视图持有者关联起来。
修改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的内容。
本文来自穷水尽更词穷投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/483522.html