Kotlin的recyclerview项目点击事件需要一个界面吗



我正在尝试实现recyclerviewitem 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函数,不如在活动中使用所有点击和覆盖的接口

最新更新