首页 > 解决方案 > Kotlin中recyclerview项目点击事件是否需要接口?

问题描述

我正在尝试实现item click event一个recyclerview.

Java中,使用了创建用于单击项目的 in 、在 中实现它interface并将an 传递给的典型方法。adapteractivityanonymous objectadapter

但是,Kotlin接受lambda expressions并可以将它们作为arguments.

所以我不一定需要使用 an interface,是吗?

还是有充分的理由interfaces尽可能多地使用?

标签: androidkotlinandroid-recyclerview

解决方案


您可以使用高阶函数来完成此操作,而无需使用接口。

这是一个例子:

片段/活动

    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,您可以使用 lambda 并用更少的代码行做同样的事情。


推荐阅读