StaggeredGridLayoutManager实现GridLayoutManager的Span效果
以前我们可以根据不同的item设置不同的spanSize,如下
GridLayoutManager layoutManager = new GridLayoutManager(getContext(), SPAN_COUNT);
GridLayoutManager.SpanSizeLookup spanSizeLookup = new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
Object item = mItems.get(position);
return item instanceof LiveInfoModel ? 1 : SPAN_COUNT;
}
};
layoutManager.setSpanSizeLookup(spanSizeLookup);
int space = getResources().getDimensionPixelSize(R.dimen.base_dimen_10);
if (vRecyclerView != null) {
vRecyclerView.addItemDecoration(new LiveItemDecoration(space, spanSizeLookup));
}
但是StaggeredGridLayoutManager是不支持的,列表类型的list由于用到了https://github.com/drakeet/MultiType 这个框架
这里可以在中对不同绑定内容设置,viewbinder或者adapter中可以重写方法如下,对指定位置进行处理
@Override
protected void onViewAttachedToWindow(@NonNull ViewHolder holder) {
super.onViewAttachedToWindow(holder);
ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
if (lp instanceof StaggeredGridLayoutManager.LayoutParams && holder.getLayoutPosition() == 0) {
StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp;
p.setFullSpan(true);
}
}