RecyclerView与ListView不同,无法直接通过setItemClicklistener来获得单个item的点击时间,这个时候,我们可以通过在adapter中定义接口,并在Activity中实现相应接口来获得每个Item的点击事件,也就是标准的委托模式。
具体做法如下:
第一步 在Adapter类中定义内部接口,我自己定义的如下:
1
2
3
4
5
6
7
8
9
10
11 /**
* 在活动中实现的接口
*/
public interface SelectItem {
/**
* 在活动中定义的方法
* @param view view对象
* @param position item的位置
*/
void select(View view, int position);
}
第二步 在onBindViewHolder方法中定义定义点击事件,并在点击事件中执行该接口的逻辑
1 | holder.mainView.setOnClickListener(new View.OnClickListener() { |
这样我们就得到了在回调函数中的view和position,这样就能在Activity中对相应的数据进行操作了
第四步 在adapter中定义定义设置委托对象的函数
1 | public void setSelectItem(SelectItem selectItem) { |
做好这一步,我们就可以通过在Activity中重写接口中的方法来获得当前点击类的位置和view对象了
最后一步,在Activity中重写接口函数
1 | pickItemAdapter.setSelectItem(new PickItemAdapter.SelectItem() { |