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全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
RecyclerView GridLayoutManager实现复杂的列数变化的布局
遇到复杂的不规则列(即有的行显示的列数多,有的行显示的列数少,并且每列显示的内容页不一样)。对于这种需求在RecyclerView出来之前的解决方案,要么就是Li……
<<上一篇
下一篇>>
文章目录
关闭
目 录