2

我基本上尝试实现这一设计原理(from Google's Material Design): enter image description here 因此我做了父母RecyclerViewLinearLayoutManager,然后在RecyclerView适配器,我已经把孩子RecyclerView与“富媒体”部分的GridLayoutManager(动作区域2)。一切工作正常,除了我已经设置内部RecyclerView电网有match_parent宽度和高度wrap_content的事实,但它不能正确计算内容的大小,在0 &从而隐藏看似离开它。如果我将子女RecyclerView设置为特定高度,则项目会显示在内,但当然会在底部切断。 其他人似乎碰到过这个问题,but in their case, both have linear layouts。 (另见"Khay's" answer here。)RecyclerView与GridLayoutManager内RecyclerView与LinearLayoutManager

现在我的问题是,如何将一个覆盖onMeasure方法“pptang”没有在上面的链接问题的接受的答案,但定制GridLayoutManager而不是自定义LinearLayoutManager内?我还没有张贴了我的代码在这里,因为它本质上是相同的一个链接,只是我需要做一个自定义的GridLayoutManager而不是为孩子RecyclerView,以便正确措施“pptang的”接听的状态。

否则,有没有更好的办法,而不是使用1个RecyclerView第2个RecyclerView里面?只有1 RecyclerView可以填充的活性/片段都与上述CardViews的列表和独特的项目每个CardView内的电网?

+0

装饰根据材料设计指南“限制的补充措施,以两个动作”。你想在父列表中添加多少项?滚动如何工作?网格和列表都使用垂直滚动? – masp

+0

我想有几个'ViewPager'选项卡;一个带有3个父亲'CardViews',另一个带有8个父亲'CardViews',另一个带有大约5个父亲'CardViews'。目的是为了网格完全“打开”,因此,不需要内部滚动,并且只能为父CardViews垂直滚动。根据我所看到的,在另一个里面有一个'RecyclerView'也会干扰工具栏的隐藏('CoodinatorLayout'),如果你想通过按住RecyclerView的网格进行滚动,工具栏不会隐藏,隐藏在孩子外面的某个地方'RecyclerViews' – inferKNOX

+0

我想我可能已经与您实际询问的@masp相切了。抱歉。在个人CardViews中,我只想在顶部标题和图标,中心网格以及用于隐藏一些支持文本的“扩展器”。可能还要让Cardview的头部分能够隐藏/折叠并显示/展开网格,就像“ExpandableListView”一样。 – inferKNOX

回答

1

您可以使用该库SectionedRecyclerViewAdapter只有一个RecyclerView构建它。

您可以找到以下here图像的例子的完整代码。

enter image description here

首先创建一个科类:

class MySection extends StatelessSection { 

    String title; 
    String subtitle; 
    List<String> list; 

    public MySection(String title, String subtitle, List<String> list) { 
     // call constructor with layout resources for this Section header, footer and items 
     super(R.layout.section_header, R.layout.section_item); 

     this.title = title; 
     this.subtitle = subtitle; 
     this.list = list; 
    } 

    @Override 
    public int getContentItemsTotal() { 
     return list.size(); // number of items of this section 
    } 

    @Override 
    public RecyclerView.ViewHolder getItemViewHolder(View view) { 
     // return a custom instance of ViewHolder for the items of this section 
     return new MyItemViewHolder(view); 
    } 

    @Override 
    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { 
     MyItemViewHolder itemHolder = (MyItemViewHolder) holder; 

     // bind your view here 
     itemHolder.tvItem.setText(list.get(position)); 
    } 

    @Override 
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) { 
     return new SimpleHeaderViewHolder(view); 
    } 

    @Override 
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { 
     MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder; 

     // bind your header view here 
     headerHolder.tvTitle.setText(title); 
     headerHolder.tvSubTitle.setText(subtitle); 
    } 
} 

然后您设置RecyclerView与节:

// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); 

// Create your sections with the list of data for each year 
MySection section1 = new MySection("Title", "Subhead", firstDataList); 

// Add your Sections to the adapter 
sectionAdapter.addSection(section1); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
GridLayoutManager glm = new GridLayoutManager(getContext(), 2); 
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
    @Override 
    public int getSpanSize(int position) { 
     switch(sectionAdapter.getSectionItemViewType(position)) { 
      case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER: 
       return 2; 
      default: 
       return 1; 
     } 
    } 
}); 
recyclerView.setLayoutManager(glm); 
recyclerView.setAdapter(sectionAdapter); 
+0

我明白你的意思,这实际上是我以前,从[这里](http://blog.sqisland .COM/2014/12/recyclerview栅与 - header.html中)。但这并不是我想要的,我真的希望'CardView'成为部分,其中的元素就像Google自己说明的那样,并且这些'CardViews'本身就在'RecyclerView'中。如何才能做到与谷歌显示的结果一样? – inferKNOX

+0

还有更简单的库支持使用自定义布局管理器[RendererRecyclerViewAdapter](https://github.com/vivchar/RendererRecyclerViewAdapter)的嵌套回收站视图,请参阅CompositeViewRenderer。也请在这个答案https://stackoverflow战利品。com/a/48464993/4894238 – Vitaly

0

综上所述。 您不应该在回收站内使用回收站。你需要实现一个自定义的gridLayoutManager。为了达到这个阅读这些:

从文档https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ItemDecoration.html

的ItemDecoration允许应用程序添加偏移量从适配器的数据设置特定项目视图的特殊的绘图和布局。这对于项目的亮点,视觉分组边界多间绘制分隔有用。

所以,如果你使用上面这个http://blog.sqisland.com/2014/12/recyclerview-grid-with-header.html一起你绝对可以实现你在找什么。只需将您从材质指南中呈现的图像视为您的gridLayoutManager中的一个组。

  • 你可以有不同类型的视图
  • 每一行可能有多个视图
  • 每一行可能有不同的
+0

我明白你的意思,并同意'RecyclerView'内的RecyclerView是错误的。但是,将它们与边界进行分组只会达到与上述类似的结果,而不是相同的结果,因为这是实际的“CardView”,而不仅仅是一个分组。那么问题就变成了,我们如何从简单的分组到实际的'CardViews'? – inferKNOX

相关问题