使用GridLayoutManager(RecyclerView),将最后一个网格设置为全宽

5

我正在使用带有GridLayoutManagerRecyclerView来以网格形式显示一些项目。它工作得很好,并在网格内显示2列项目。

但是,当项目数量为奇数时,我希望最后一个项目的宽度与RecyclerView的宽度相同,即占据整个宽度。

是否有任何方法可以使用GridLayoutManager来实现这一点,或者我必须构建自定义设计?

请帮忙。

1个回答

18

您可以使用GridLayoutManagerlayoutManager.setSpanSizeLookup方法。

以下是使用该方法的步骤:

final GridLayoutManager layoutManager = new GridLayoutManager(context, 2);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                if (mAdapter != null) {
                    switch (mAdapter.getItemViewType(position)) {
                        case 1:
                            return 1;
                        case 0:
                            return 2; //number of columns of the grid
                        default:
                            return -1;
                    }
                } else {
                    return -1;
                }
            }
        });

现在您需要在适配器中确定viewType

@Override
public int getItemViewType(int position) {
    return (position == getItemCount() - 1) ? 0 : 1; // If the item is last, `itemViewType` will be 0
}

继续打造更好的应用程序!!


1
节省了我数天的搜索时间。谢谢。 - Carlos Anyona
1
有人可以帮忙吗?我正在尝试这个,但屏幕上只显示一列。但是当我删除setSpanSizeLookup方法时,我会得到总共2列。 我正在尝试实现与问题中提到的相同的目标。我在网格中有7个项目,最后一个网格项目应该填满整个宽度。 提前感谢您的帮助。 - Abhijit Kurane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接