[英]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.