RecyclerView使用SpanSizeLookup设置Item占位

一、 摘要

本文介绍使用栅栏布局管理器的抽象内部类SpanSizeLookup实现Item占位多行或多列的方法。


二、 方法分析

1. SpanSizeLookup.getSpanSize

public abstract int getSpanSize(int position)

该方法返回position这个位置对应item所占的位数,默认情况下,每一个item占1个位。


2. GridLayoutManager

public GridLayoutManager(Context context, int spanCount)

栅栏布局管理器,构造方法传入列数,创建一个垂直方向的管理器。因此使用该管理器的RecyclerView将具有水平方向填补、垂直方向滑动的表现性质。


3. GridLayoutManager.setSpanSizeLookup

public void setSpanSizeLookup(SpanSizeLookup spanSizeLookup)

给栅栏布局管理器设置SpanSizeLookup对象。


三、 示例

假设现在的需求是奇数位置item占位为1,偶数位置item占位为2:

先定义一个SpanSizeLookup:

public class DemoSpanSizeLookup extends GridLayoutManager.SpanSizeLookup {
    private final int mSpanCount;

    public DemoSpanSizeLookup(int spanCount) {
        mSpanCount = spanCount;
    }

    @Override
    public int getSpanSize(int position) {
        if (position % 2 == 0) {
            return mSpanCount;
        } else {
            return 1;
        }
    }
}

然后应用于RecyclerView上:

private static final int COLUMN_COUNT = 3;
private static final int COLUMN_EVEN = 2;

private RecyclerView mRecyclerView;
private DemoSpanSizeLookup mSpanSizeLookup;

private void initView(){
    mRecyclerView = findViewById(R.id.rvDemo);
    mSpanSizeLookup = new DemoSpanSizeLookup(COLUMN_EVEN);
    GridLayoutManager layoutManager = new GridLayoutManager(getContext(), COLUMN_COUNT);
    layoutManager.setSpanSizeLookup(mSpanSizeLookup);
    mRecyclerView.setLayoutManager(layoutManager);
}

需要注意,SpanSizeLookup中的占位数别超过栅栏布局管理器的列数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值