android - 如何实现具有不同行数项目的 RecyclerView?

标签 android android-recyclerview

我知道我可以为 Android 上的项目实现具有不同 View 的 RecyclerView。

但我的需求在这里有点不同。我想知道如何实现具有不同行数项目的 RecyclerView。

例如,第一行有 2 个项目,第二行只有 1 个项目,第三行有 3 个项目,...

是否可以使用 RecyclerView 来实现此功能?如果可以,我该如何实现?

感谢您的帮助。

西尔万

最佳答案

您要查找的内容可以通过 GridLayoutManager 来完成本身,这里唯一的技巧是使用 least common multiple (lcm)每行的列数作为总跨度数。这是一个简单的例子:

@Override
public void onCreate() {
    super.onCreate();

    ...

    int spanCount = lcm(2, 1, 3, 8);
    GridLayoutManager layoutManager = new GridLayoutManager(this, spanCount);
    layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            int numberOfColumns;
            switch (position) {
                case 0:
                    numberOfColumns = 2;
                    break;
                case 1:
                    numberOfColumns = 1;
                    break;
                case 2:
                    numberOfColumns = 3;
                    break;
                case 3:
                    numberOfColumns = 8;
                    break;
                default:
                    numberOfColumns = spanCount;
            }
            return spanCount / numberOfColumns;
        }
    });
    recyclerView.setLayoutManager(layoutManager);

    ...
}

public static int lcm(int... input) {
    int result = input[0];
    for(int i = 1; i < input.length; i++) result = lcm(result, input[i]);
    return result;
}

关于android - 如何实现具有不同行数项目的 RecyclerView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57790668/

相关文章:

java - 如何快速滚动卡片 View

android - RecyclerView 的项目第一次在 Tablayout 中显示,但第二次不显示

java - 从 recyclerview 和 firebase 数据库中删除显示错误的项目

android - 在 RecyclerView 中按组划分元素

android - RecyclerView 在项目移除时滚动到顶部

java - 错误 :(21, 8) 错误:MyActivity 类是公共(public)的 - 无法编辑 MyActivity

android - 当您拥有 AppCompatActivity 和标准库时,为什么要包含最低 SDK 版本?

android - 在 android 默认选项卡式 Activity 中, fragment 不适合屏幕,因为高度和 actionBar 是可移动的

android - Glide 监听器不起作用

java - Android ServerSocket 端口选择