У меня в Android есть адаптер для просмотра рециркуляции.Часть моего класса адаптера выглядит следующим образом:
private lateinit var itemLongClick: ItemLongClick
override fun onCreateViewHolder(parent: ViewGroup, a: Int): RecyclerAdapter.ViewHolder {
// Define And Initialize The Custom View And Its Holder//
val myView = LayoutInflater.from(parent.context).inflate(customLayout, parent, false)
val viewHolder = ViewHolder(myView)
// What Happens When A List Item Is Long Clicked//
myView.setOnLongClickListener { view ->
// Differ Action To Class Instance//
itemLongClick.longClicked(context, viewHolder.layoutPosition, view)
// End Function//
true
}
// Returns The Custom View//
return viewHolder
}
fun setItemLongClick(itemLongClick: ItemLongClick) {
// Sets The Value For this.itemLongClick//
this.itemLongClick = itemLongClick
}
Я создал интерфейс, похожий на этот:
interface ItemLongClick {
// Function Declaration For When An Item Is Long Clicked//
fun longClicked(context: Context, position: Int, view: View)
}
Вместо того, чтобы писать свой длинный код клика в классе адаптера, который я хочучтобы отличать его от действия, которое вызывает класс адаптера.Я знаю, что один из способов сделать это - создать интерфейс kotlin, а затем вызвать его в другом классе, как этот
userAdapter.setItemLongClick(object: ItemLongClick {
override fun longClicked(context: Context, position: Int, view: View) {
}
})
Но это выглядит грязно.Я знаю, что Java-интерфейсы работают с SAM, но я тоже не хочу этого делать.Я хочу, чтобы onLongClick был лямбда-выражением, но я не уверен, как настроить лямбда-выражение Kotlin, чтобы это работало, и я нигде не могу найти хороший пример.
Заранее спасибо