gpt4 book ai didi

android - 如何使用 StaggeredGridLayoutManager 重排 RecyclerView 中的项目

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:24 26 4
gpt4 key购买 nike

我正在使用 StaggeredGridLayoutManager 并获得接近我想要的东西。我有一个水平交错的 2 行网格,其中一些项目是 1 行的高度,而其他项目跨越两行。我希望单行高项目堆叠起来,我认为可以通过将间隙策略设置为 GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS 来实现,但这似乎不起作用。

当前:

 ___    ___    ___    ___|___|  |   |  |___|  |   |       |   |         |   |       |___|         |___|

What I want:

 ___    ___    ___|___|  |   |  |   | ___   |   |  |   ||___|  |___|  |___|

The relevant code snippets:

Setting up the layout manager for the recyclerview:

StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(layoutManager);

这是我的自定义适配器的 onBindViewHolder(这只是一个简化的示例)。基本上我在 CardView 中有一个 ImageView(CardView 的高度和宽度设置为 wrap_content)。

if(position%3==0) {
ViewGroup.LayoutParams layoutParams = viewHolder.myImage.getLayoutParams();
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 75, context.getResources().getDisplayMetrics());
viewHolder.myImage.setLayoutParams(layoutParams);

StaggeredGridLayoutManager.LayoutParams layoutParams1 = ((StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams());
layoutParams1.setFullSpan(false);
}
else {
ViewGroup.LayoutParams layoutParams = viewHolder.myImage.getLayoutParams();
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
viewHolder.myImage.setLayoutParams(layoutParams);

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

最佳答案

这样做不需要考虑元素在适配器中的位置,这几乎是不希望的。您最好的选择是重新订购适配器中的项目

关于android - 如何使用 StaggeredGridLayoutManager 重排 RecyclerView 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26856036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com