交错的回收者视图

时间:2018-10-02 07:31:16

标签: android listview android-recyclerview infinite-scroll android-gridview

我要实现项目列表,如下所示。

  1. 如果项目总数= 1(显示完整项目)
  2. 如果项目总数= 2(在2列中显示2个项目)
  3. 如果项目总数= 3(显示3个项目,第1列中2个,第2列中1个)
  4. 等等...

4 cases

如果包含5和6个项目,则该部分应如下所示滚动

5 case

6 case

enter image description here

  

我想实现这一点,作为我的应用程序中的一部分。在Android中实现此功能的正确方法是什么,我需要一个起点。回收者视图有可能吗?请共享任何库或github项目(如果可用)。

2 个答案:

答案 0 :(得分:1)

是的,您可以使用StaggeredLayoutManager来实现,其中需要根据数据大小(如以下代码)设置跨度计数方向

enter code private void setSpanValue() {
    StaggeredGridLayoutManager staggeredGridLayoutManager;
    if (modelArrayList.size() == 1) {
        staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
    } else if (modelArrayList.size() == 2) {
        staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
    } else if (modelArrayList.size() == 3) {
        staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
    } else if (modelArrayList.size() == 4) {
        staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
    } else {
        staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
    }

    recyclerView.setLayoutManager(staggeredGridLayoutManager);
    recyclerView.hasFixedSize();
    Adapter adapter = new Adapter(this, modelArrayList, checkEvenOrOdd(modelArrayList.size()));
    recyclerView.setAdapter(adapter);
}

对于超过4个项目,您需要检查数据是偶数还是奇数,如以下代码所示:

private boolean checkEvenOrOdd(int n) {
    if ((n % 2) == 0) {
        // number is even
        return true;

    } else {
        // number is odd
        return false;
    }
}

查看我的示例项目,它将解决您的问题 https://github.com/DanishAmjad12/HetrogenousLayout

答案 1 :(得分:0)

使用自定义布局管理是可能的。我们可以根据需要修改layout-manger。

我从vlayout git lib中使用过DelegateAdapter,它的确很棒。 检查下面的链接以获取更多详细信息。

https://github.com/alibaba/vlayout