首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridLayoutManager spansizelookup不工作

GridLayoutManager spansizelookup不工作
EN

Stack Overflow用户
提问于 2018-02-18 12:13:29
回答 1查看 2.7K关注 0票数 2

我使用的是GridLayoutManager,所以动态设置recyclerview的列数(每行)。下面是我的代码:

代码语言:javascript
复制
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);

但是,列数似乎没有更新。如下图所示:

我可以在logcat中验证spansize的数量是否在2或1之间变化,但实际的recyclerview并没有显示出来。它只显示每行的一个列/跨度。

编辑:我无法使第一行包含2个项目/列。第二个项目始终放在第二行。我打算在第二行有1列让路给一个原生广告,这将占据整个行。我在我的spansizelookup中使用了这个:return (position % 3) == 0 ? 1 : 2;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-18 12:34:47

下面是你的方法的重要部分:

代码语言:javascript
复制
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,但是布局很简单,我看到了这个:

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

代码语言:javascript
复制
return (position % 3) == 0 ? 2 : 1;

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48848374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档