Android 如何使用StaggedGridLayoutManager订购iTen

Android 如何使用StaggedGridLayoutManager订购iTen,android,performance,android-studio,android-layout,Android,Performance,Android Studio,Android Layout,我正在创建一个网格,如下图所示 输入列表:{“位置0”、“位置1”、“位置2”、“位置3”、“位置4”、…} 问题是,我想要一个包含两种组件的菜单 小-->图像中的位置0 巨大-->图像中的位置2 因此,当我的适配器从位置4创建项目时,它是无序的 预期输出: 位置1、位置2、位置3 位置4、位置5、位置6 public class SampleRecyclerViewAdapter extends RecyclerView.Adapter<SampleViewHolders> {

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

输入列表:{“位置0”、“位置1”、“位置2”、“位置3”、“位置4”、…}

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

小-->图像中的位置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();
}
公共类SampleRecyclServiceAdapter扩展了RecycleView.Adapter{
私人清单项目清单;
私人语境;
公共采样器ECyclServiceAdapter(上下文,
列表(项目列表){
this.itemList=itemList;
this.context=上下文;
}
@凌驾
public SampleViewHolders onCreateViewHolder(视图组父级,int-viewType){
View layoutView=LayoutFlater.from(parent.getContext()).inflate(
R.layout.book\u list\u项目,空);
SampleViewHolders rcv=新的SampleViewHolders(layoutView);
返回rcv;
}
@凌驾
BindViewHolder上的公共无效(SampleViewHolder,int位置){
holder.bookName.setText(itemList.get(position.getName()+position);
如果(位置%2==0){
支架。项目视图。设置最小高度(250);
}否则{
支架。项目视图。设置最小高度(300);
}
}
@凌驾
public int getItemCount(){
返回此.itemList.size();
}

}

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

mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  @Override
   public int getSpanSize(int position) {
    return //do your logic here
  }
});
如果要添加跨度计数

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

设置
spanCount
如下
GridLayoutManager GridLayoutManager=new GridLayoutManager(这个,3)
Hi,问题是元素的高度不一样。setMinimumHeight方法的剂量是多少?@JustasSimpleLineOfCode他遇到的问题是,由于适配器调整可用跨度区域之间的下一行,从逻辑角度改变了项目的顺序。准确地说,你能看到解决问题的方法吗?我不知道构建此布局的最佳方法是什么。您好,可以更改行跨度吗?根据这种逻辑,我只能更改列跨度。元素的高度应不同。是否要更改项目的宽度或高度?例如,高度(项目A高度->X,项目B高度X/3)