在 Kotlin 中为 recyclerView 的 child 设置监听器
Set listener for a child of a child of recyclerView in Kotlin
我有一个 RecyclerView,它的模型中有三个按钮,
如何为每个按钮设置监听器?我可以访问 RecyclerView 的 child 并为其设置监听器,但我想为 RecyclerView 的 child 的 child 设置监听器。考虑到我正在使用 Kotlin。
我使用此代码可以让您访问 RecyclerView 的 child,但不能访问 RecyclerView child 的 child:
fun RecyclerView.addOnItemClickListener(onClickListener: OnItemClickListener) {
this.addOnChildAttachStateChangeListener(object: RecyclerView.OnChildAttachStateChangeListener {
override fun onChildViewDetachedFromWindow(view: View) {
view.setOnClickListener(null)
}
override fun onChildViewAttachedToWindow(view: View) {
view.setOnClickListener {
val holder = getChildViewHolder(view)
onClickListener.onItemClicked(holder.adapterPosition, view)
}
}
})
}
为此,您必须在 RecyclerView
项的每个 Button
上设置 OnClickListener
。以下面为例
class YourAdapter: RecyclerView.Adapter<YourAdapter.YourViewHolder>(), View.OnClickListener {
//Other code
....
override fun onBindViewHolder(holder: YourAdapter.YourViewHolder, position: Int) {
holder.button1.setOnClickListener(this)
holder.button2.setOnClickListener(this)
holder.button3.setOnClickListener(this)
}
override fun onClick(v: View?) {
when(v?.id) {
R.id.button1 -> {
//Do your operation
}
R.id.button2 -> {
//Do your operation
}
R.id.button3 -> {
//Do your operation
}
}
}
class YourViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
lateinit var button1: Button
lateinit var button2: Button
lateinit var button3: Button
}
}
我有一个 RecyclerView,它的模型中有三个按钮, 如何为每个按钮设置监听器?我可以访问 RecyclerView 的 child 并为其设置监听器,但我想为 RecyclerView 的 child 的 child 设置监听器。考虑到我正在使用 Kotlin。
我使用此代码可以让您访问 RecyclerView 的 child,但不能访问 RecyclerView child 的 child:
fun RecyclerView.addOnItemClickListener(onClickListener: OnItemClickListener) {
this.addOnChildAttachStateChangeListener(object: RecyclerView.OnChildAttachStateChangeListener {
override fun onChildViewDetachedFromWindow(view: View) {
view.setOnClickListener(null)
}
override fun onChildViewAttachedToWindow(view: View) {
view.setOnClickListener {
val holder = getChildViewHolder(view)
onClickListener.onItemClicked(holder.adapterPosition, view)
}
}
})
}
为此,您必须在 RecyclerView
项的每个 Button
上设置 OnClickListener
。以下面为例
class YourAdapter: RecyclerView.Adapter<YourAdapter.YourViewHolder>(), View.OnClickListener {
//Other code
....
override fun onBindViewHolder(holder: YourAdapter.YourViewHolder, position: Int) {
holder.button1.setOnClickListener(this)
holder.button2.setOnClickListener(this)
holder.button3.setOnClickListener(this)
}
override fun onClick(v: View?) {
when(v?.id) {
R.id.button1 -> {
//Do your operation
}
R.id.button2 -> {
//Do your operation
}
R.id.button3 -> {
//Do your operation
}
}
}
class YourViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
lateinit var button1: Button
lateinit var button2: Button
lateinit var button3: Button
}
}