Android:如何在GridView或RecyclerView中形成1-2-1列表项?

Android:如何在GridView或RecyclerView中形成1-2-1列表项?,android,gridview,android-recyclerview,Android,Gridview,Android Recyclerview,我试图在回收器或网格视图中实现以下列表项的形成: 1 1 1 1 1 1 1 其中1是一个视图持有者(列表项)。我的列表项都具有相同的宽度和高度 我尝试将recyclerview与网格布局管理器一起使用,如下所示: recyclerView.setLayoutManager(new GridLayoutManager(getContext(),2)); 但这将严格显示2列 我已经尝试过在我的recyclerView中使用StaggedGridLayoutManager,如下所示: St

我试图在回收器或网格视图中实现以下列表项的形成:

 1
1 1
 1
1 1
 1
其中
1
是一个视图持有者(列表项)。我的列表项都具有相同的宽度和高度

我尝试将recyclerview与网格布局管理器一起使用,如下所示:

recyclerView.setLayoutManager(new GridLayoutManager(getContext(),2));
但这将严格显示2列

我已经尝试过在我的
recyclerView
中使用
StaggedGridLayoutManager
,如下所示:

StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
但这只会将我的列表项扩展到两列列表,类似于
GridLayoutManager
。 我还尝试在适配器中更改1/3列表视图的宽度,但一个视图的宽度不会影响另一个视图的位置

当前设置如下所示:

    adapterPre = new CategoryListAdapter(this, getContext(),GeneralUtils.isLoggedIn());
    RecyclerView premadeLists = view.findViewById(R.id.practise_recycler);
    GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(),2);
    gridLayoutManager.setSpanSizeLookup(new CustomSpanSizeLookup());
    premadeLists.setLayoutManager(gridLayoutManager);
    premadeLists.setHasFixedSize(false);
    premadeLists.setAdapter(adapterPre);
CustomSpanSizeLookup

class CustomSpanSizeLookup extends GridLayoutManager.SpanSizeLookup {
    @Override
    public int getSpanSize(int position) {
        return position % 2 == 0 ? 2 : 1;
    }
}

您必须使用具有2个跨距的
GridLayoutManager
,并创建一个自定义
GridLayoutManager.SpanSizeLookup

class CustomSpanSizeLookup extends GridLayoutManager.SpanSizeLookup {
    @Override
    public int getSpanSize(int position) {
        return position % 2 == 0 ? 2 : 1;
    }
}
class CustomSpanSizeLookup扩展了GridLayoutManager.SpanSizeLookup{
@凌驾
公共整数getSpanSize(整数位置){
/*三分之一的项目将占据整行,
*三分之二的项目将占据半排并且可以
*因此,应将其相邻放置。
*/
返回位置%3==0?2:1;
}
}
您可以使用以下方法在
GridLayoutManager
上进行设置:

layoutManager.setPansizeLookup(新的CustomSpanSizeLookup());

我应该使用
GridView
而不是
RecyclerView
来进行此操作吗?不,应该使用
RecyclerView
@keswarker。您的单元格的宽度是否为
匹配\u parent
GridLayoutManager
的方向是垂直的?它的跨度大小是否为2?好的,在使单元格宽度
匹配父视图后,有些视图是父视图的宽度,但有些视图是宽度的一半。这不是我所需要的。我需要两个相邻的视图,而不是一个视图占用两个视图的空间,对不起,好吧,我现在明白了,如果我更改
位置%2==0?2:1到位置%3==0?2:1
性能如期,非常感谢:)