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)
}
}
替换此代码
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)
}
您可以在“onBindViewHolder”中定义一个onClickListener。对于您的代码,您可以将其放入“onBindViewHolder”;
holder.itemView.setOnClickListener {
println("bouton pushed ------------ $position ***************************")
listener.OnItemClick(position)
}
Position 将在 onBindViewHolder 中可用。所以你不需要定义另一个位置。
在你的内部类替换:
init{
itemView.setOnClickListener(this)
}
作者:
init{
itemView.setOnClickListener(adapterPosition)
}
以 Kotlin 风格按块完成
class RecyclerAdapter(private var listener: (Int) -> Unit) :
RecyclerView.Adapter<RecyclerAdapter.ViewHolder>()
在你的onBindViewHolder
holder.itemView.setOnClickListener {
listener(position)
}
您现在可以免费使用界面,更短更清晰的代码!