在recyclerView中,经常要获取到到item的点击事件。获取这个事件有两种方法。
1、第一种方法是定义一个onItemClickListener,在onBindViewHolder中设置item的点击事件,
var onItemClickListener: ((stock: String) -> Unit)? = null
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is ViewPointViewHolder) {
holder.bindData(data[position])
holder.itemView.setOnClickListener {
onItemClickListener?.invoke(holder.stock!!)
notifyDataSetChanged()
}
}
}
在activity中,回调这个onItemClickListener
private fun initViewPointRecyclerView() {
viewPointAdapter = ControllerViewPointAdapter()
viewPointAdapter!!.onItemClickListener = {
//todo...
}
}
2、第二种方法是在adapter中获取到每一个item的position,activity中根据这个position,来设置具体的点击事件
class ControllerViewPointAdapter(var callView: (id: Int) -> Unit): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var data: List<String> = mutableListOf()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return ViewPointViewHolder(parent.inflateLayout(R.layout.item_controller_viewpoint))
}
override fun getItemCount(): Int {
return data.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is ViewPointViewHolder) {
holder.bindData(data[position])
holder.itemView.setOnClickListener {
callView(position)
notifyDataSetChanged()
}
}
}
}
在定义ControllerViewPointAdapter的时候,设置回调参数callView,在onBindViewHolder中设置回调的具体数据(也可以设置在其他地方),
在 activity中对回调的参数进行处理
OrderConfirmAdapter(this@OrderConfirmActivity, callView = { planid ->
ARouter.getInstance().build(RouteHelper.MINATO_LIST)
.withString("planid", planid)
.navigation()
}, callItemView = {
view, position, inner_position ->
handleView(view, position, inner_position)
}
)
其中的position就是点击的某一个item的id,也可用这种方法传递adapter里的其他参数到activity。