带标题的多层可扩展列表视图

时间:2018-09-22 06:53:33

标签: android expandablelistview

我正在尝试使用标题为this的标题实现多级可扩展列表视图。在这里,在图片中,类别A和I只是标题而不是可单击的。展开的类别是类别B,G,H,J。展开时,看起来像类别B所示。

我希望它是动态的。通过说动态,我的意思是,当我得到如下所示的Json时,它应该自动使上述视图膨胀。

[
{
"name": "Category A",
"secondary_class": [
  {
    "name": "Category B",
    "tertiary_class": [
      {
        "name": "Category C"
      },
      {
        "name": "Category D"
      },
      {
        "name": "Category E"
      },
      {
        "name": "Category F"
      }
    ]
  },
  {
    "name": "Category G",
    "tertiary_class": []
  },
  {
    "name": "Category H",
    "tertiary_class": []
  }
]
},
{
"name": "Category I",
"secondary_class": [
  {
    "name": "Category B",
    "tertiary_class": []
  },
  {
    "name": "Category J",
    "tertiary_class": []
  }
]
}
]

也欢迎可以帮助我实现这一目标的想法。如果没有,请在我浏览所有可能的参考文献时向我推荐必要的参考文献,但找不到任何解决方案。

2 个答案:

答案 0 :(得分:1)

好的,您应该定义一个Java类,一个自定义的recyclerview适配器,一个自定义的布局适配器并使用它们,但是如何?

java类结构应如下所示:

public class Categories{
    String name;
    ArrayList<Categories> subCategories;
}

现在创建一个布局文件,该文件具有用于固定标题的textview和用于子类别(第二类B,G,H)的recyclerview
然后为最后一个类别创建另一个布局,该布局具有可单击的页眉布局和用于(C,D,E,F)项目的recyclerview
您可以将此布局合并为一个布局

现在创建一个像这样的回收站视图:

public categoriesAdapter(ArrayList<Categories> categoriesList, Context context ,int level, ...)

在适配器类中检查级别,并根据级别绑定适当的布局,然后将适当的布局重新分配给recyclerviews,

if(level==0)//start with 0
    inner_recyclerview.setAdapter(new categoriesAdapter(currentItem.subCategories,mContext,1)

最后为上一个级别创建另一个自定义的recyclerview适配器,并像这样使用它

if(level==1)
    inner_recyclerview.setAdapter(new lastCategoriesAdapter(currentItem.subCategories,mContext,1)

并将click事件分配给可点击的版式,并根据级别检查版式中每个项目的可见性,
这个清楚还是需要更多描述?

答案 1 :(得分:-1)

您可以使用ExpandableLayout,如下所示:

<net.cachapa.expandablelayout.ExpandableLayout
    android:layout_below="@+id/item_category_name"
    android:id="@+id/expandable_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    app:el_duration="300"
    app:el_expanded="false">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view_sub1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</net.cachapa.expandablelayout.ExpandableLayout>

您可以通过此ExpandableLayout制作recyclerview适配器项目xml。对于下一个级别,通过这种方法再次制作您的内部recyclerview适配器项目。

您可以制作此布局所需的尽可能多的内部级别。