在Kotlin中为recyclerView的子项的子项设置侦听器

问题描述 投票:1回答:1

我有一个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)
            }
        }
    })
}
android kotlin android-recyclerview onclicklistener
1个回答
1
投票

要实现这一点,您必须在OnClickListener项目的每个Button上设置RecyclerView。以下面的例子为例

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.