如何使用 StaggeredGridLayoutManager 订购项目

Posted

技术标签:

【中文标题】如何使用 StaggeredGridLayoutManager 订购项目【英文标题】:How to order itens with StaggeredGridLayoutManager 【发布时间】:2020-06-28 13:05:56 【问题描述】:

我正在创建一个网格,如下图所示。

输入列表:“位置 0”、“位置 1”、“位置 2”、“位置 3”、“位置 4”、.....

问题是,我想要一个包含两种组件的菜单。

small -->图片中的位置0

巨大的 --> 图片中的位置 2

所以,当我的适配器从 位置 4 创建项目时,它是无序的。

预期输出:

位置 1、位置 2、位置 3

位置 4、位置 5、位置 6

public class SampleRecyclerViewAdapter extends RecyclerView.Adapter<SampleViewHolders> 
private List<ItemObject> itemList;
private Context context;

public SampleRecyclerViewAdapter(Context context,
                                 List<ItemObject> itemList) 
    this.itemList = itemList;
    this.context = context;


@Override
public SampleViewHolders onCreateViewHolder(ViewGroup parent, int viewType) 
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(
            R.layout.book_list_item, null);
    SampleViewHolders rcv = new SampleViewHolders(layoutView);
    return rcv;


@Override
public void onBindViewHolder(SampleViewHolders holder, int position) 
    holder.bookName.setText(itemList.get(position).getName()  + position);

    if (position % 2 == 0) 
        holder.itemView.setMinimumHeight(250);
     else 
        holder.itemView.setMinimumHeight(300);
    


@Override
public int getItemCount() 
    return this.itemList.size();

【问题讨论】:

这样设置spanCount GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3); 嗨,问题是元素的高度不一样。 什么剂量 setMinimumHeight 方法剂量? @JustASimpleLineOfCode 他遇到的问题是由于适配器调整了可用跨度区域之间的下一行,因此从逻辑角度更改了项目的顺序 对了,你能找到解决问题的办法吗?我不知道构建此布局的最佳方法是什么。 【参考方案1】:

您应该为查找大小添加侦听器

mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() 
  @Override
   public int getSpanSize(int position) 
    return //do your logic here
  
);

如果要添加跨度计数

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, //count);

【讨论】:

您好,是否可以更改 row 跨度?使用这种逻辑,我只能更改 col 跨度。元素的高度应该不同。 您要更改项目的宽度或高度吗? 高度,例如(Item A height -> X, Item B height X/3)

以上是关于如何使用 StaggeredGridLayoutManager 订购项目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?