【发布时间】:2019-06-21 19:43:27
【问题描述】:
我在 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 设为 Lambda,但我不确定如何设置 Kotlin lambda 表达式以使其正常工作,而且我在任何地方都找不到好的示例。
提前致谢
【问题讨论】: