簡體   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