【发布时间】:2019-02-28 22:12:40
【问题描述】:
为RecyclerView 适配器中的项目创建点击侦听器的正确方法是什么? This tutorial 说应该在 onBindViewHolder 中完成,但其他人在 onCreateViewHolder 中说,我没有看到后者的任何教程,因此我很困惑。
class MyRVAdapter(private val myList: ArrayList<Item>) : RecyclerView.Adapter<MyRVAdapter.ViewHolder>() {
override fun getItemCount(): Int {
return myList.size
}
class ViewHolder (itemView : View):RecyclerView.ViewHolder(itemView) {
// val myButton = itemView.findViewById<Button>(R.id.btn_A)!!
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.myButton.text = (myList[position].btnTitle)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.my_cv, parent, false)
return ViewHolder(v)
val myButton = v.findViewById<Button>(R.id.btn_A)!!
myButton.setOnClickListener {
customView = View.inflate(holder.itemView.context, R.layout.fragment_dialog, null)
val builder = AlertDialog.Builder(holder.itemView.context)
builder.setIconAttribute(R.attr.imgInfo)
builder.setTitle(R.string.dialog_title)
builder.setView(customView)
builder.setPositiveButton(android.R.string.ok){ dialog, _ -> dialog.dismiss() }
builder.show()
}
}
}
【问题讨论】:
-
又是你),我以为你明白我的建议。只需剪切 onBindViewHolder() 中的代码 holder.myButton.setOnClickListener {//所有代码} 并粘贴到
class ViewHolder并删除所有holder. -
@underoid 我可以把
holder: ViewHolder移到onCreateViewHolder吗? -
您无需执行任何其他操作。你还有问题吗?
-
@underoid 是的。我也收到此错误:
'onCreateViewHolder' overrides nothing. -
@MacaronLover 在 onBindViewHolder 内部使用点击监听器。在 Java 中使用了 onClickListener 的用法。在创建视图之前使用新的单击侦听器。它可能会抛出错误或异常。所以在 onBindViewHolder 中使用 onClickListener 很好
标签: android kotlin android-recyclerview onitemclicklistener