繁体   English   中英

Kotlin 中的 recyclerview 项目点击事件是否需要接口?

[英]Is an interface required for recyclerview item click event in Kotlin?

我正在尝试实现一个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 函数,只需在您的活动中使用所有点击和覆盖的界面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM