美文网首页初见
Scrollview嵌套多个Recycleview

Scrollview嵌套多个Recycleview

作者: 今晚打老虎啦 | 来源:发表于2017-09-12 14:50 被阅读40次

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

    1.分析解决方案

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

    2.数据结构

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

    public class AppendObj {
        private String name;
        private List<AppendObj> children;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public List<AppendObj> getChildren() {
            return children;
        }
    
        public void setChildren(List<AppendObj> children) {
            this.children = children;
        }
    }
    

    构建数据如下

    private void getData() {
            AppendObj dto;
            datalist = new ArrayList<AppendObj>();
            for (int i = 0; i < 5; i++) {
                dto = new AppendObj();
                dto.setName("名称" + i);
                List<AppendObj> children = new ArrayList<AppendObj>();
                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上

    00120123-F75E-47BA-B3E2-E3D0D5A143A6.png

    相关文章

      网友评论

        本文标题:Scrollview嵌套多个Recycleview

        本文链接:https://www.haomeiwen.com/subject/pjucsxtx.html