当前位置: 首页 > 知识库问答 >
问题:

使用SpanSizeLookup为GridLayoutManager中的项目设置跨度

颛孙越
2023-03-14

我想使用节标题实现类似网格的布局。想想 https://github.com/TonicArtos/StickyGridHeaders

我现在所做的:

mRecyclerView = (RecyclerView) view.findViewById(R.id.grid);
mLayoutManager = new GridLayoutManager(getActivity(), 2);
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                switch(mAdapter.getItemViewType(position)){
                    case MyAdapter.TYPE_HEADER:
                        return 1;
                    case MyAdapter.TYPE_ITEM:
                        return 2;
                    default:
                        return -1;
                }
            }
        });

mRecyclerView.setLayoutManager(mLayoutManager);

现在常规项目和标题的跨度大小都为1。如何解决这个问题?

共有3个答案

戚建白
2023-03-14

我自己问题的答案:设置适配器后,从活动中重写getSpanSizeLookup()。

湛铭
2023-03-14

标题的跨度应等于整个列表的跨度计数。

mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
           switch(mAdapter.getItemViewType(position)){
                    case MyAdapter.TYPE_HEADER:
                        return mLayoutManager.getSpanCount();
                    case MyAdapter.TYPE_ITEM:
                        return 1;
                    default:
                        return -1;
                }
    }
});
端木震博
2023-03-14

问题是标题的跨度大小应该为2,而常规项的跨度大小应为1。因此正确的实现是:

mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                switch(mAdapter.getItemViewType(position)){
                    case MyAdapter.TYPE_HEADER:
                        return 2;
                    case MyAdapter.TYPE_ITEM:
                        return 1;
                    default:
                        return -1;
                }
            }
        });
 类似资料:
  • 我的回收物品在onCreateViewHolder中膨胀 我想展示这样的东西,其中一排的高度是回收站视图的一半?在空间的其余部分添加填充物?我可以通过GridLayoutManager来完成吗? 这是我的GridLayoutManager

  • 我知道我可以用跨越两列: 但是我怎样才能使第一个项目也跨越2行呢? 我曾尝试通过将其他项目的高度增加一倍来设置第一个项目的高度,但这导致与第一个项目相同行的每个项目也被拉伸到该高度:

  • 我正尝试在中为每一行水平居中所有项目 我尝试了很多东西:作为父级的RelativeLayout,然后使用layout_centerInParent,使用基本的Android:layout_gravity=“center”,尝试添加一些space元素,使用权重和....在 中,但我没有成功:( 我所拥有的 活动中 item_row.xml 我在谷歌上搜索了很多,找到了这个答案,但实际上我不知道如何为

  • 附注:第一次用拖放开发任何东西。 关于如何使用ListView实现此功能,有很多主题,例如:https://raw.githubusercontent.com/btownRippleman/furthestProgress/master/furthestProgress/src/com/anappforthat/android/languagelineup/dynamicListView.java

  • 我试图在Eclipse中使用Maven建立一个maven项目。到目前为止我所尝试的: 通过创建新的Maven项目并选择组织,在Eclipse中创建项目。编码室。版本2.7中的mojo gwt maven插件。0 问题:-Eclispe没有给我提供任何运行配置 所以我去了项目的属性,去了谷歌标签,把Eclipse指向webapp文件夹,并检查了上面写着“使用谷歌网络工具包”的chedkbox。 在那