GridLayoutManager spansizelookup无效

时间:2018-02-18 04:13:29

标签: android

我正在使用GridLayoutManager,因此动态设置recyclerview的列数(每行)。这是我的代码:

GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                int num = 0;
                if(position == 0)
                    num = 2;
                else if(position == 1)
                    num = 1;
                else if (position % 4 == 0)
                    num = 1;
                else
                    num = 2;
                Log.i("spansize", "spansize: " + num);
                return num;
            }
        });

        mAdapter = new ImageAdapter(getActivity(), mBlessingPics, options, ImageAdapter.POPULAR);

        mPopularImagesGrid.setLayoutManager(gridLayoutManager);

        mPopularImagesGrid.setAdapter(mAdapter);
        mAdapter.setOnClick(this);

但是,似乎没有更新列数。请看下面的图片: enter image description here

我可以在logcat中验证spansize的数量是从2还是1变化,但实际的recyclelerview没有显示它。它只显示每行一列/跨度。

编辑: 我无法让第一行中包含2个项目/列。第二项始终位于第二行。我打算在第二行中有一列让位于占据整行的原生广告。我在我的spansizelookup中使用它: return (position % 3) == 0 ? 1 : 2; enter image description here

1 个答案:

答案 0 :(得分:3)

这是您方法的重要部分:

if(position == 0)
    num = 2;
else if(position == 1)
    num = 1;
else if (position % 4 == 0)
    num = 1;
else
    num = 2;

因此,对于位置14, 8, 12, 16...,跨度大小将为1,对于其他所有内容,其大小将为2。这意味着从不会有两个项目彼此相邻,跨度大小为1,并且由于您的网格只有两个跨度,所以一切都需要在它自己的行上。我使用了您的SpanSizeLookup,但布局简单,我看到了:

enter image description here

因此,如果您希望有时看到彼此相邻的两个图像,有时只看到一个图像,那么您的跨度大小查找需要不同的算法。例如:

return (position % 3) == 0 ? 2 : 1;

enter image description here