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;
private DecorationCallback decorationCallback;
public GroupItemDecoration(Context context,View groupView,DecorationCallback decorationCallback) {
this.context = context;
this.groupView = groupView;
this.decorationCallback = decorationCallback;
}
public interface DecorationCallback {
/**
- 设置分组
- @param groupList
*/
void setGroup(List groupList);
/**
- 构建GroupView
- @param groupView
- @param groupItem
*/
void buildGroupView(View groupView, GroupItem groupItem);
}
}
然后重写getItemOffsets方法ÿ