RecyclerView中的多个LayoutManager

时间:2015-10-29 09:14:55

标签: android

我使用StaggeredGridLayoutManager制作了RecyclerView,如下所示:

staggered

我需要在它上面添加一些TextView(如LinearLayoutManager中的一个colum)。它就像上面的LinearLayoutManager和底部的StaggeredGridLayoutManager。像这样:

enter image description here

我怎样才能实现这一目标?在这里真的很困惑,请帮忙。

更新2015年10月29日:

我在这里结合denis_lor和mato的答案解决了这个问题: Span multiple columns with RecyclerView

2 个答案:

答案 0 :(得分:5)

密钥位于adapter,您基本上依赖viewType,然后决定viewholderlayoutinflate的类型。这是一个例子:

private static final int TYPE_FIRST_ITEM = 0;
private static final int TYPE_ITEM = 1;

...

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   if (viewType == TYPE_FIRST_ITEM) {
      // inflate your view holder for the first item
   } else {
      // here inflate your view holder for all the other items
   }

...

@Override
    public int getItemViewType(int position) {
        if (position == 0) {
            return TYPE_FIRST_ITEM;
        } else {
            return TYPE_ITEM;
        }
    }

所以基本上你有1 adapter,2(或更多)viewHolder等等。如果您的adapter应该有两种layout,则使用2 viewHolder和布局,否则如果您还需要一个页脚layout,则使用更多。

答案 1 :(得分:2)

滚动时你想要发生什么?

如果顶部视图仍然可见,您可以使用RecyclerViewLinearLayout与2个孩子TextViewRecyclerView打包在一起。

如果您想要滚动,可以使用LayoutManager.setSpanSizeLookup,如下所示:

            layoutManager.setSpanSizeLookup(new SpanSizeLookup() {

                @Override
                public int getSpanIndex(int position, int spanCount) {
                    return position % spanCount;
                }

                @Override
                public int getSpanSize(int position) {
                    if (position != 0) {
                        return layoutManager.getSpanCount();
                    }
                    return 1;
                }
            });