View groupView = layoutInflater.inflate(R.layout.item_group,null);
- 调用recyclerView.addItemDecoration添加GroupItemDecoration
recyclerView.addItemDecoration(new GroupItemDecoration(this,groupView,new GroupItemDecoration.DecorationCallback() {
@Override
public void setGroup(List groupList) {
//设置分组,GroupItem(int startPosition),例如:
GroupItem groupItem = new GroupItem(0);
groupItem.setData(“name”,“第1组”);
groupList.add(groupItem);
groupItem = new GroupItem(5);
groupItem.setData(“name”,“第2组”);
groupList.add(groupItem);
}
@Override
public void buildGroupView(View groupView, GroupItem groupItem) {
//构建groupView,通过groupView.findViewById找到内部控件(暂不支持点击事件等),例如
TextView textName = (TextView) groupView.findViewById(R.id.text_name);
textName.setText(groupItem.getData(“name”).toString());
}
}));
如果还是不清楚可以去看下demo
实现思路
在我们自定义ItemDecoration之前首先得了解ItemDecoration有什么用,不清楚的可以看下这两篇博客
简单来说,我们实现分组及粘性头部效果分三步
- 重写ItemDecoration.getItemOffsets在RecyclerView中为GroupView预留位置
- 重写ItemDecoration.onDraw在上一步预留的位置中绘制GroupView
- 重写ItemDecoration.onDrawOver绘制顶部悬停的GroupView(粘性头部)
我们按顺序一步步讲,首先,创建GroupItemDecoration继承自ItemDecoration,在初始化方法中获取用户设置的GroupView,并提供接口给用户设置分组相关
public class GroupItemDecoration extends RecyclerView.ItemDecoration {
private Context context;
private View groupView;