多层ExpandableListView

kas*_*rch 22 android expandablelistview expandablelistadapter

我目前正在开展一个项目,我需要以下内容:

- MainGroup 1 (Expandable)
  - SubGroup 1 (Expandable)
    - SubSubGroup 1 (Expandable)
      - Child View
      - Child View
      - ...
    - SubSubGroup 2 (Expandable)
      - Child View
      - Child View
      - ...
  - SubGroup 2 (Expandable)
    - SubSubGroup 3 (Expandable)
      - Child View
      - ...
    - SubSubGroup 4 (Expandable)
      - Child View
      - ...
  - SubGroup 3 (Expandable)
    - Child View
    - ...
- MainGroup 2 (Expandable)
  - ...
Run Code Online (Sandbox Code Playgroud)

在最这将是一个ExpandableListView内部的ExpandableListView内部的ExpandableListView-这么3层ExpandableListView:

  • MainGroup只会持有其他人ExpandableListView.
  • SubGroupExpandableListView除了最后两个之外还会举行其他会议ChildViews.(我认为这两个可以用一个替代SubSubGroup)
  • SubSubGroup总是抱着ChildViews.

我的问题是,我认为我无法理解ExpandableListView布局如何是儿童的基本原则.我看像例子这样,但不能让我的头周围的功能.

我试过简单地ExpandableListView在另一个中添加一个孩子 - 但是有些东西不起作用,因为ExpandableListView如果扩展其中一个外部组,只有内部的第一个项目可见.但是,我可以手动设置外部组容器的高度,使其大到足以显示内部的所有项目ExpandableListView.为了达到最佳,高度的计算当然应该在飞行中进行.

所以,要获得一些更加坚实的问题:

  • 有人可以给我一个ExpandableListView"生命周期" 的解释(我的意思是即时,重复使用视图,扩展/崩溃听众),包括:
    • 如何以及何时ExpandableListView通知孩子被扩展/折叠?
    • 如何ExpandableListView知道所有孩子可以容纳多少空间放入一个集装箱?
  • 使用ExpandableListView创建上述内容有多大的好处,而不是只使用一些LinearLayouts和一些混合我自己的解决方案OnClickListeners

编辑

对于我的上一个问题,我可能会注意到可能有1到20+的任何地方MainGroups.

Qui*_*ick 10

首先,让我向您推荐GrepCode网站.它有Android SDK类的来源.感谢他们,我已经找到了AdapterViews的基本原则(我给你一个ExpandableListView的链接,但是如果你不仅研究它,而且它的类 - 父母也是如此).

现在,您的问题和我的答案:

如何以及何时通知ExpandableListView扩展/折叠子项?

请参见方法handleItemClick(View v,int position,long id)

ExpandableListView如何知道让所有子项适合组容器的空间大小?

我没有很好地研究这个问题,但据我所知,它是由requestLayout()方法完成的.我们还发现一个可滚动的View无法嵌入到另一个可滚动的View中.(这是众所周知的错误:将ListView放入ScrollView或ListView到ExpandableListView中).

与使用一些LinearLayouts和一些OnClickListeners将我自己的解决方案混合在一起相比,使用ExpandableListView创建上述内容有多大的好处?

AdapterViews更快.但是,即使对于ExpandableListView,您的构造也太复杂了.您可以使用2种解决方案.

  1. Guru-solution:如果你专业从头开始设计你自己的Views/ViewGroups(我的意思是,你理解方法requestLayout(),dispatchDraw()等),然后用3个级别编写你自己的GrandExpandableListAdapter.
  2. 中等解决方案:使用ExpandableListAdapter获得前2个级别,并将LinearLayouts用于第3级.