Scrollview嵌套多个Recycleview

最近项目中有个需求,在一个线性布局,放多个recyclerview,recyclerview展示的是一个grid,效果如下。

1.分析解决方案

起初是想用recyclerview嵌套recyclerview,但是因为子view高度的问题,总是出现白色区域,找了很多方法,都达不到效果,没办法,转换一下思路,要实现这一效果,可以采用向LinearLayout动态添加子View的方法,实现这一效果,废话不多说,直接分析数据结构,上代码。

2.数据结构

看下我们的数据,长这样,一个从服务器返回或者加工过的是List,同时里面嵌套了List,模拟下:

public class AppendObj {
    private String name;
    private List children;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List getChildren() {
        return children;
    }

    public void setChildren(List children) {
        this.children = children;
    }
}

构建数据如下

private void getData() {
        AppendObj dto;
        datalist = new ArrayList();
        for (int i = 0; i < 5; i++) {
            dto = new AppendObj();
            dto.setName("名称" + i);
            List children = new ArrayList();
            for (int j = 0; j < 10; j++) {
                AppendObj obj = new AppendObj();
                obj.setName(i * j + "");
                children.add(obj);
            }
            dto.setChildren(children);
            datalist.add(dto);
        }
    }

3.获得最终结果
这里的 AppendAdapter 就不用多做介绍了吧,另外parent是主Activity里面的一个父View,用来存放各个含recycleview的子View,核心代码如下:

private void initView() {
        for (AppendObj obj : datalist) {
            View view = LayoutInflater.from(this).inflate(R.layout.layout_recyclerview, null);
            TextView name = (TextView) view.findViewById(R.id.children_name_text);
            RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.children_recyclerview);

            name.setText(obj.getName());
            GridLayoutManager manager = new GridLayoutManager(context, 3);
            AppendAdapter adapter = new AppendAdapter(context, obj.getChildren());
            recyclerView.setLayoutManager(manager);
            recyclerView.setAdapter(adapter);

            parent.addView(view);
        }
    }

总结
至此,功能完成,截图如下,略显粗糙,有时间优化下,上传到git上

Scrollview嵌套多个Recycleview_第1张图片
00120123-F75E-47BA-B3E2-E3D0D5A143A6.png

你可能感兴趣的:(Scrollview嵌套多个Recycleview)