方法一:在Adapter单独设置
在Adapter的onCreateViewHolder或者onBindViewHolder单独为每个组件设置点击事件,两处都可以,但推荐在onBindViewHolder实现。
方法二:提供自定义接口
上一种方法有一个明显的缺点:如果点击的逻辑需要在Activity或者Fragment使用就会变得麻烦,比如长按弹出一个Dialog然后进行逻辑处理,这种情况下把逻辑放在Adapter绝对不是明智之选。
实现思路:在Adapter提供接口,由外部实现
- 首先在Adapter声明一个接口,里面提供等待实现的回调函数
- 声明一个延迟初始化接口变量
- 设置一个函数用以设置接口(用来给第二步的变量赋值)
- 通过view自带的setOnClickListener、setOnLongClickListener的回调函数调用接口的函数,实现回调的效果。实现哪种按照需求,这里我同时实现了两个。
- 最后一步,调用自定义的setOnItemClickListener并实现自己的回调逻辑
/*为节省篇幅,删去了无关代码*/
/*adapter类*/{
/*步骤2的接口变量*/
private lateinit var onItemClickListener: OnItemClickListener