在水平RecyclerView中添加垂直列

时间:2015-04-14 12:03:25

标签: android adapter android-recyclerview

我在项目中创建了RecyclerView水平。我希望水平行具有不同的大小和多个垂直列,每个行包含不同数量的行,如下图所示:

enter image description here

水平行数是可变的。第一列可以有四行,第二列可以有三行,四列......列数也是可变的。

结果就像一个电视指南,列是频道和行排放。这不是电视xD的指南

我以这种方式完成了水平行:

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

recyclerView.setLayoutManager(layoutManager);


public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.VerticalItemHolder>{

    @Override
    public void onBindViewHolder(VerticalItemHolder itemHolder, int position) {
        Item item = arrayItems.get(position);    

        int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, item.getSizeRow(), root.getResources().getDisplayMetrics());

        ViewGroup.LayoutParams params = root.getLayoutParams();
        if (params == null) {
            params = new ViewGroup.LayoutParams(heigth, width);
        } else {
            params.width = width;
            params.height = heigth;
        }

        root.setLayoutParams(params);
    }

结果如下图所示:

enter image description here

但是我无法在垂直列中显示某些项目。怎么做?感谢

1 个答案:

答案 0 :(得分:5)

hereVariable span size

中使用RecyclerView回答了问题

使用GridLayoutManager代替LinearLayoutManager,如下所示:

GridLayoutManager manager = new GridLayoutManager(this, 3);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  @Override
  public int getSpanSize(int position) {
    return (3 - position % 3);
  }
});
recyclerView.setLayoutManager(manager);

在这里,我必须解释一些事情。见下图 -

enter image description here

  1. 在上面的代码中,跨度大小为3.这意味着任何行中所需的最大列数为3.

  2. 在上面的代码中,方法getSpanSize返回position的跨度大小。

  3. 以上代码的跨度大小:

    1. 如果位置为0,则跨度大小为3
    2. 如果位置为1,跨度大小为2
    3. 如果位置为2,跨度大小为1
    4. 如果位置为3,则跨度大小为3
    5. 如果位置为4,跨度大小为2
    6. 如果位置为5,则跨度大小为1 ......等等。
    7. 如果您理解这一点,它可能会对您有所帮助。