Kotlin RecyclerView:监听器不工作

问题描述 投票:0回答:4

Kotlin 的新手。除了 setOnClicklistener 之外,我有一个 recyclerview 工作正常。单击该行未被检测到。

OnClick 没有被调用。

class RecyclerAdapter (private var listener: OnItemClickListener): RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {

    private var title = arrayOf ("Calibration", "Unit in ft", "Voice system", "Vario sound", "Pull warning", "ADD warning", "Alt. warning" )
    private var images = intArrayOf(R.drawable.altitud24, R.drawable.straighten24, R.drawable.volume24, R.drawable.volume24,R.drawable.report24,R.drawable.report24,R.drawable.report24)


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerAdapter.ViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.card_layout, parent, false)
        return ViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: RecyclerAdapter.ViewHolder, position: Int) {
        holder.textview.text = title[position]
        holder.itemImage.setImageResource(images[position])
    }

    override fun getItemCount(): Int {
        return title.size
    }

    inner class ViewHolder(itemView : View): RecyclerView.ViewHolder(itemView), View.OnClickListener {
        val itemImage: ImageView = itemView.findViewById(R.id.imageRecycler)
        val textview: TextView = itemView.findViewById(R.id.textRecycler)

        init{
            itemView.setOnClickListener(this)
        }

        override fun onClick(v: View?) {
            println("bouton pushed ------------ $position ***************************")
            val position:Int = absoluteAdapterPosition
            listener.OnItemClick(position)
        }
    }

    interface OnItemClickListener{
        fun OnItemClick(position: Int)
    }
}
kotlin android-recyclerview onclicklistener
4个回答
0
投票

替换此代码

 init{
                itemView.setOnClickListener(this)
            }
    
            override fun onClick(v: View?) {
                println("bouton pushed ------------ $position ***************************")
                val position:Int = absoluteAdapterPosition
                listener.OnItemClick(position)
            }

用这个检查它是否适合你。

itemView.setOnClickListener { view ->
                    val position = absoluteAdapterPosition
                    println("bouton pushed ------------ $position ***************************")
                    listener.OnItemClick(position)
                }

0
投票

您可以在“onBindViewHolder”中定义一个onClickListener。对于您的代码,您可以将其放入“onBindViewHolder”;

holder.itemView.setOnClickListener {
    println("bouton pushed ------------ $position ***************************")
    listener.OnItemClick(position)
}

Position 将在 onBindViewHolder 中可用。所以你不需要定义另一个位置。


0
投票

在你的内部类替换:

        init{
        itemView.setOnClickListener(this)
    }

作者:

        init{
        itemView.setOnClickListener(adapterPosition)
    }

0
投票

以 Kotlin 风格按块完成

class RecyclerAdapter(private var listener: (Int) -> Unit) :
RecyclerView.Adapter<RecyclerAdapter.ViewHolder>()

在你的onBindViewHolder

holder.itemView.setOnClickListener {
      listener(position)
}

您现在可以免费使用界面,更短更清晰的代码!

© www.soinside.com 2019 - 2024. All rights reserved.