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

使用 Recycler 跨多个列查看

慕宏峻
2023-03-14

所以我试图去有一个交错的布局,但列表中的第一项需要跨越两列。前两排也是固定高度。除了跨越两列的第一个项目,其他都正常工作。

我将RecyclerView.Adapter与StaggeredGridLayoutManager一起使用。它似乎不是开箱即用的功能。我假设我可以制作一个自定义布局管理器,但我不知道从哪里开始。我尝试过搜索,但我找不到任何关于如何让项目跨越多列的信息。

下图是我在列表中寻找的内容。

共有3个答案

齐栋
2023-03-14

ljmelgui提出的解决方案工作正常,但可以通过尝试重用layoutParams(如果它们存在)来与mato答案混合进行小优化:

public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
    if ( layoutParams == null ) {
          layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
    layoutParams.setFullSpan(true);
    viewHolder.itemView.setLayoutParams(layoutParams);
}
白信鸿
2023-03-14

我为垂直配置的布局跨度的所有列所做的是创建新的布局参数,并在适配器实现中将完整跨度设置为 true:

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    layoutParams.setFullSpan(true);
    viewHolder.itemView.setLayoutParams(layoutParams);
}
曾骁
2023-03-14

目前,staggedGridLayoutManager仅支持跨所有列的视图(对于垂直配置的布局),而不支持任意数量的视图。

如果您仍然想将它们跨越所有列,您应该在适配器实现中执行此操作:

public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
    layoutParams.setFullSpan(true);
}

恕我直言, StaggeredGridLayoutManager仍在大力开发中,Google希望我们使用它进行反馈:(

 类似资料:
  • 我试图计算许多列的行平均值。有人能解释一下为什么下面的代码只计算代码中两个变量(var_1和var_13)的平均值,而不是所有13列的平均值吗?

  • 我是JavaFX新手,正在尝试用GridPane做一个简单的按钮设计。 我不知道如何让一个按钮跨越多个列/行,而不把其他按钮推开。我一直在使用HBox和VBox将其他按钮组合在一起。我试过在按钮上设置Rowspan,但似乎不起作用。 看起来怎么样 我希望它看起来怎么样 这是我的代码:

  • 我们最近遇到了由RabbitMQ支持的应用程序的意外行为。RabbitMQ版本为3.6.12,我们使用的是.NET客户端5.0.1 应用程序订阅了两个队列,一个用于命令,另一个用于事件--我们还使用手动确认。我们的应用程序配置为有7个消费者。每个通道都有自己的通道(IModel),每个通道都有自己的EventingBasicConsumer,当EventingBasicConsumer.Recei

  • ActiveMQ消息组是跨多个使用者进行负载平衡的一个非常好的特性。简而言之:消息流根据消息中嵌入的组标识符()在单个队列的多个使用者之间进行分区。(因此,使用者1将获得的所有消息,使用者2将获得的所有消息,依此类推) 现在,假设您有两个队列:和,并假设在流经这两个队列的消息中使用一致的S分类法。代理为on queue选择的使用者是否与代理为on queue选择的连接相同? 但是,我们能模拟这种行

  • 我想保留一个中央的.scss文件,该文件存储项目的所有SASS变量定义。 该项目将有大量的CSS文件,由于其性质。重要的是,我要在一个位置声明所有项目范围的样式变量。 在SCSS中有办法做到这一点吗?

  • 我们正在尝试遵循DDD的原则,同时开发我们的新应用程序。EF2.1用于持久化实体。 我们有很多场景,其中一个具有一个聚合的实体可能引用另一个聚合中的某些内容。例如,我的订单有一个客户的参考。在订单实体上,我们通过持有外键值来实现这一点。过于简化的模型。 我们不将Order对象上的任何导航属性包含到Customer对象,因为它模糊了聚合的边界 对于可能需要列出订单并包含下订单客户姓名的需求,团队首选