在水平RecyclerView中添加垂直列

pab*_*upi 1 android adapter android-recyclerview

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

在此输入图像描述

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

结果就像一个电视指南,列是通道和行排放.这不是电视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);
    }
Run Code Online (Sandbox Code Playgroud)

结果如下图所示:

在此输入图像描述

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

Amr*_*dri 5

从回答这里使用Variable span sizeRecyclerView

使用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);
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

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

以上代码的跨度大小:

  1. 如果position为0,则span大小为3
  2. 如果position为1,则span大小为2
  3. 如果position为2,则span大小为1
  4. 如果位置为3,则跨度大小为3
  5. 如果position为4,则span大小为2
  6. 如果position为5,则span大小为1 ......依此类推.

如果您理解这一点,它可能对您有所帮助.