【问题标题】:Set listener for a child of a child of recyclerView in Kotlin在 Kotlin 中为 recyclerView 的孩子的孩子设置监听器
【发布时间】:2020-01-01 07:23:45
【问题描述】:

我有一个 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】:

要实现这一点,您必须在 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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多