【发布时间】:2020-02-27 20:01:37
【问题描述】:
我正在研究如何在我的 recyclerview 上正确添加 onClick 事件,
目前我正在使用 customAdapter 中的接口
class CategoryAdapter(val categoryList : List<CategoryObject>, val context: Context, val mItemClickListener: MainInterface) : RecyclerView.Adapter<CategoryAdapter.ViewHolder>() {
interface MainInterface {
fun onCategoryItemClick(categoryKey: Int)
}
override fun getItemCount(): Int {
return categoryList.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(context).inflate(R.layout.listview_category, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder?.categoryName?.text = categoryList[position].categoryName
// holder?.categoryName.setOnClickListener{
// mItemClickListener.onCategoryItemClick(position)
// }
// holder?.categoryName?.setOnClickListener { listener(categoryList[position]) }
}
inner class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
val categoryName = view.lv_txt_category_name
init {
view.setOnClickListener {
mItemClickListener.onCategoryItemClick(adapterPosition)
}
}
}
}
viewHolder 的 onClick 没有在我的活动 ovveride 函数上注册。
但是把 onClick 放在 onBindViewHolder 里面效果很好,
我不确定哪个更有效,如果 onBindViewHolder onClick 是正确的答案,那么我会坚持下去,但如果 viewHolder 是正确的,为什么它不能正常工作?
提前致谢!
更新
这是我用来研究事物的 stackoverflow 帖子
【问题讨论】:
-
你试过在itemView而不是view上设置点击监听???
-
@hamid_c,itemView 不工作 :(
-
你的意思是你在
init中使用itemView.setOnClickListener { }而不是view.setOnClickListener { },但结果是一样的??? -
@hamid_c,是的,但仍然没有调用我在活动中的覆盖函数。
-
你能在你的
view.setOnClickListener中添加一个Log并在Logcat 中检查它是否被调用???
标签: android kotlin onclicklistener android-recyclerview