RecyclerView GridLayoutManager实现复杂的列数变化的布局
遇到复杂的不规则列(即有的行显示的列数多,有的行显示的列数少,并且每列显示的内容页不一样)。对于这种需求在RecyclerView出来之前的解决方案,要么就是ListView中嵌套GirdView,要么就直接使用ScrollView,勉强可以实现此效果,但是这两种实现都有非常大的缺陷,即都不能进行item的复用。
GridLayoutManager.SpanSizeLookup
可以使用GridLayoutManager
结合GridLayoutManager.SpanSizeLookup
的相关功能实现,创建GridLayoutManager
时列数填写所有可能列数的最小公倍数。再结合Aadapter中的:
@Override
public int getItemViewType(int position) {
return position == 0 ? 0 : type;
}
即可实现。实现的关键代码如下:
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position == 0 ? 2 : 1; //此句代码设置对应position位置item的跨列数,第一行显示一列,其他行显示两列
}
});
recyclerView.setLayoutManager(layoutManager);
GridLayoutManager设置某个item类型占据的列数
/**
* 将RecyclerView网格布局中的某个item设置为独占一行、只占一列,只占两列等等
* @param gridLayoutManager
*/
private void setSpanCount(GridLayoutManager gridLayoutManager) {
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int type = getItemViewType(position);
if (type == TYPE_NORMAL_ITEM) {
return 1; //只占一行中的一列
} else {
return gridLayoutManager.getSpanCount(); //独占一行
}
}
});
}
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/18/recyclerview-gridlayoutmanager-implements-complex-layout-with-varying-column-counts/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论