正常recyclerView 添加header,不在多说,只需要在区分
getItemViewType
方法的时候,添加
if (mHeaderView == null && mFooterView == null) return TYPE_NORMAL; if (position == 0) return TYPE_HEADER; if (position >= list.size()) return TYPE_FOOTER; return TYPE_NORMAL;
即可简单实现,这个功能大家用的比较多了。可是当列表需要展示多列时,如何让头部信息,能完整的占领顶部几个格子的空间呢。下面来介绍一下
可变的span size
在上面的基本设置中,我们的spanCount为2,每个item的span size为1,因此一个header需要的span size则为2。在我尝试着添加header之前,我想先看看如何设置 span size。其实很简单。
注:span size表示一个item的跨度,跨度了多少个span。
GridLayoutManager manager = new GridLayoutManager(this, 3);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return (3 - position % 3);
}
});
recyclerView.setLayoutManager(manager);
setSpanSizeLookup可以让你根据position来设置 span size,上面代码中的公式所得到的 span size依次是3, 2, 1, 3, 2, 1...
如上所述,我们只需在
getSpanSize()方法中,判断,当position=0时,即为头部,此时我们return相应的列数即可
if (haveHeader) { layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int i) { if (i == 0) return setCount(); else return 1; } }); }