Android SpanSizeLookup

00.先来看一个需求

  • 该页面中,同时包含列表,2列的网格,3列的网格如何优雅实现?
    • image

01.SpanSizeLookup的作用

  • RecyclerView 可以通过 GridLayoutManager 实现网格布局, 但是很少有人知道GridLayoutManager 还可以用来设置网格中指定Item的列数,类似于合并单元格的功能,而所有的这些我们仅仅只需通过定义一个RecycleView列表就可以完成,要实现指定某个item所占列数的功能我们需要用到GridLayoutManager.SpanSizeLookup这个类,该类是一个抽象类,里面包含了一个getSpanSize(int position)的抽象方法,该方法的返回值就是指定position所占的列数

02.SpanSizeLookup如何使用

  • 如下所示

    • 先是定义了一个6列的网格布局,然后通过GridLayoutManager.SpanSizeLookup这个类来动态的指定某个item应该占多少列。
    • 比如getSpanSize返回6,就表示当前position索引处的item占用6列,那么显示就只会展示一个ItemView【占用6列】。
    • 比如getSpanSize返回3,就表示当前position索引处的item占用3列
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    GridLayoutManager manager = new GridLayoutManager(this, 6);
    manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
    SpanModel model = mDataList.get(position);
    if (model.getType() == 1) {
    return 6;
    } else if(model.getType() == 2){
    return 3;
    }else if (model.getType() == 3){
    return 2;
    }else if (model.getType() == 4){
    return 2;
    } else {
    return 1;
    }
    }
    });
    • image