当前位置: 首页 > 知识库问答 >
问题:

GridLayoutManager,每行具有不同的列计数

戚良弼
2023-03-14

我正在尝试使用GridLayoutManager构建一个RecyclerView,它每行有一个可变的列计数,如下所示:

同一行中所有项目的宽度之和将始终为屏幕宽度。

我试图重新组织项目列表,按行列表分组,然后每行膨胀一个线性布局。它不太好。

所以我被困住了,没有任何想法。任何帮助都将非常感激

共有2个答案

裴建华
2023-03-14

我也有类似的情况,认为使用kotlin:密封类是一个不错的选择,您可以为适配器列表中的每一项设置任何spanSizeLookup

GridLayoutManager的安装示例spanSizeLookup:

val spanCount = 2
val layoutManager =  GridLayoutManager(context, spanCount)
layoutManager.spanSizeLookup = object : SpanSizeLookup() {
    override fun getSpanSize(position: Int): Int {
        val item = adapter.getItemList().getOrNull(position) ?: return spanCount
        return when (item) {
            is ProfileItem.Header -> spanCount
            is ProfileItem.Status -> spanCount
            is ProfileItem.Progress -> spanCount
            is ProfileItem.Empty -> spanCount
            is ProfileItem.Item -> spanCount / 2
            is ProfileItem.Load -> spanCount / 2
        }
    }
}

我的密封类

sealed class ProfileItem {
    object Header : ProfileItem()
    data class Status(var content: UserItem.User?) : ProfileItem()
    object Progress : ProfileItem()
    object Empty : ProfileItem()
    data class Item(val content: RecordItem.Record) : ProfileItem()
    object Load : ProfileItem()
}
空英达
2023-03-14

您可以使用GridLayoutManager。要在行中有不同的列计数,必须重写SetPansizeLookup。

例子:

//spanCount = 3 (just for example)
GridLayoutManager gridLayoutManager = new GridLayoutManager(getAppContext(), spanCount);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        //define span size for this position
        //some example for your first three items
        if(position == item1) {
            return 1; //item will take 1/3 space of row
        } else if(position == item2) {
            return 2; //you will have 2/3 space of row
        } else if(position == item3) {
            return 3; //you will have full row size item
        }
     }
});

我在上面的代码示例中显示了您可以更改商品大小。注意spanSize

 类似资料:
  • 我有一个在运行时加载行的表。加载后,用户需要在每一行的第一列中从中选择一个项目。然后他需要在每行的同一行上从另一个中选择一个项目。第二个的内容取决于第一个的选择。 我现在的编码方式是更改整个第二列的combobox内容。 有没有一种方法可以让每一行的组合框对象都不一样,这样我就可以在第一个组合框中选择一个值的时候处理它?

  • 我创建了包含员工信息的。在这个JTable中,我添加了名为“资历”的列。此列由表示(每行的内容不同)。例如: 内容取自。 问题是在第1行和第2行中选择的项目是“程序员”,但是“程序员”不应该出现在第2行中。只有当我单击时,才会出现正确的列表,即第2行-{“writer”,“editor”}。

  • 我成功地做到了这一点,但是以一种非常规的方式。在我的recyclerView适配器中,我对第一个元素使用了一个不同的viewHolder,一个更大的元素。这将是一个很好的解决方案,但第二个元素将低于第一个元素。所以我做了一个技巧,给recyclerView一个与第一个元素相同的固定高度,这样第一个元素和第二个元素就会重叠,我只需要让第二个元素的可见性消失。 但我并不特别喜欢这种方法。有人有更好的主

  • 问题内容: 使用Pandas或CSV模块将每行具有不同列数的CSV导入Pandas DataFrame的最佳方法是什么。 使用此代码: 产生以下错误 问题答案: 在read_csv()中提供列名列表应该可以解决问题。 例如:names = [‘a’,’b’,’c’,’d’,’e’] https://github.com/pydata/pandas/issues/2981 编辑:如果您不想提供列名,

  • 问题内容: 我有一个有趣的查询需要做。我有一张表,其中有一列包含ip地址编号(使用)和一列。我希望能够计算每天有唯一IP地址列的数量。也就是说,每天有多少个不同的ip行。因此,例如,如果一个IP地址在同一天两次,则在最终计数中将计为1;但是,如果同一IP地址在另一天,则将被计算为第二个计数。 示例数据: 问题答案: SQLFiddle演示

  • 问题内容: 我可以在不枚举的情况下计算每列的不同值吗? 说我有一个表,,,并没有其他的列。在没有明确提及这些列的情况下,我希望得到与以下结果相同的结果: 我怎样才能做到这一点 ? 问题答案: 我认为使用普通SQL可以轻松完成的最好工作就是运行这样的查询,以生成所需的查询,然后运行该查询。