Fork me on GitHub

使用委托模式在Activity中操作RecyclerView中的item

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
2
3
4
5
6
7
8
holder.mainView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mSelectItem) {
mSelectItem.select(v, i);
}
}
});
这样我们就得到了在回调函数中的view和position,这样就能在Activity中对相应的数据进行操作了

第四步 在adapter中定义定义设置委托对象的函数

1
2
3
public void setSelectItem(SelectItem selectItem) {
mSelectItem = selectItem;
}

做好这一步,我们就可以通过在Activity中重写接口中的方法来获得当前点击类的位置和view对象了

最后一步,在Activity中重写接口函数

1
2
3
4
5
6
pickItemAdapter.setSelectItem(new PickItemAdapter.SelectItem() {
@Override
public void select(View view, int position) {
selectItem(position); //对数据进行操作的函数,自己定义的
}
});

这样我们就能很方便地获取当前item的位置,对数据进行操作了!