android - GridLayoutManager spansizelookup 不工作

标签 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 变化,但实际的 recyclerview 没有显示它。它只显示每行一个列/跨度。

编辑: 我无法让第一行有 2 个项目/列。第二项总是放在第二行。我打算在第二行中留出 1 列,让位于将占据整行的原生广告。我在我的 spansizelookup 中使用它: 返回(位置 % 3)== 0 ? 1 : 2; enter image description here

最佳答案

这是您的方法的重要部分:

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

关于android - GridLayoutManager spansizelookup 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848374/

相关文章:

android - 使用 tabLayout 时如何更改所选选项卡的文本样式?

java - 如何让加载 Activity 等待线程完成

java - Eclipse Java 单元测试

android - Android 消息中的表情符号

android - 如何在 Android 中从视频 URL 捕获/录制剪辑并保存到手机

java - 如何在android中为Toast自定义背景、背景颜色和文字颜色

Android NDK - 链接共享库和 JNI 包装器时出错

android - 检测应用程序是否已卸载

java - Android (Java) 将 JSONArray 转换为 JSONObject

android - 在 onSaveInstanceState 之后无法使用 BottomsheetDialogFragment 执行此操作吗?