Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Kotlin中为recyclerView的子级的子级设置侦听器_Android_Kotlin_Android Recyclerview_Onclicklistener - Fatal编程技术网

Android 在Kotlin中为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

我有一个RecyclerView,它的模型中有三个按钮, 如何为每个按钮设置侦听器?我可以访问RecyclerView的子级并为其设置侦听器,但我想为RecyclerView的子级的子级设置侦听器。考虑一下我在使用Kotlin。

我使用的代码允许您访问recyclerView的子级,但不能访问recyclerView的子级:

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:按钮
}
}

添加您的实现迄今为止您尝试了什么始终添加一些您的工作实现(有问题):您可以在适配器中添加按钮单击