Android 在Kotlin中为recyclerView的子级的子级设置侦听器
我有一个RecyclerView,它的模型中有三个按钮, 如何为每个按钮设置侦听器?我可以访问RecyclerView的子级并为其设置侦听器,但我想为RecyclerView的子级的子级设置侦听器。考虑一下我在使用Kotlin。 我使用的代码允许您访问recyclerView的子级,但不能访问recyclerView的子级:Android 在Kotlin中为recyclerView的子级的子级设置侦听器,android,kotlin,android-recyclerview,onclicklistener,Android,Kotlin,Android Recyclerview,Onclicklistener,我有一个RecyclerView,它的模型中有三个按钮, 如何为每个按钮设置侦听器?我可以访问RecyclerView的子级并为其设置侦听器,但我想为RecyclerView的子级的子级设置侦听器。考虑一下我在使用Kotlin。 我使用的代码允许您访问recyclerView的子级,但不能访问recyclerView的子级: fun RecyclerView.addOnItemClickListener(onClickListener: OnItemClickListener) { th
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
项的每个按钮上设置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
}
}
class YourAdapter:RecyclerView.Adapter(),View.OnClickListener{
//其他代码
....
覆盖BindViewHolder(holder:YourAdapter.YourViewHolder,位置:Int){
holder.button1.setOnClickListener(此)
holder.button2.setOnClickListener(此)
holder.button3.setOnClickListener(此)
}
覆盖有趣的onClick(v:视图?){
何时(v?.id){
R.id.button1->{
//做手术
}
R.id.按钮2->{
//做手术
}
R.id.按钮3->{
//做手术
}
}
}
类YourViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
lateinit变量按钮1:按钮
lateinit变量按钮2:按钮
lateinit变量按钮3:按钮
}
}
添加您的实现迄今为止您尝试了什么始终添加一些您的工作实现(有问题):您可以在适配器中添加按钮单击