[英]Kotlin:change background color of RecyclerView item by click on it
[英]Is an interface required for recyclerview item click event in Kotlin?
我正在尝试实现一个recyclerview
的item click event
。
在Java
,使用了在adapter
中创建用于单击项目的interface
、在activity
实现它并将anonymous object
传递给adapter
的典型方法。
但是, Kotlin
接受lambda expressions
并且可以将它们作为arguments
传递。
所以我不一定需要使用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,你可以使用 lambdas 并用更少的代码行做同样的事情。
接口最适合 recyclerView 中的单击侦听器,就像您在每个视图中都有视图一样,是三个按钮,例如删除、删除和添加按钮,因此只需在接口中创建三个方法
fun onDeleteClick(position,Item) //Here item of that model which is passed in adapter
fun onAddClick(position,Item)
fun onRemoveClick(position,Item)
使用您的活动实现此接口并将其传递到您的适配器中,然后在您的适配器中创建这样的点击侦听器
Holder.itemBinding.delete.setOnClickListener{ clickListener.OnDeleteClick(position, Item) }
因此,不要为每个按钮传递 lambda 函数,只需在您的活动中使用所有点击和覆盖的界面
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.