如何使用 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 提交?