Android ExpandableListView放置不同类型的视图

通常的ExpandableListView的group item是一种视图,child item是另外一种视图,同一种item不会出现多种类型的视图,这是默认的设计。但是我们有时候为了实现更为复杂的界面,就需要ExpandableListView支援同一类型的item放置不同类型的视图。其实做法也很简单,就是Adapter需要实现HeterogeneousExpandableList接口的getChildType,getChildTypeCount,getGroupType和getGroupTypeCount这四个方法。因为ExpandableListView为了效率的因素,它的item的视图是reuse的,如果不指定各个item所用视图的类型,ExpandableListView就会默认采用第一个视图,所以如果不实现这四个方法,呈现出来的界面就是错误的,或者程序直接会crash。详细例子可以参见https://github.com/guohai/and-expandable-listview 。效果如下图:
and-expandable-listview
注意点:getChildTypeCount是用到所有不同类型的child item的总数,不管是同一group item下的不同类型,还是不同group item下的不同类型,只要重复就只算一次。getGroupTypeCount也是如此。
getChildType或者getGroupType是返回位置,所以都是从0开始的,不超过最后一个不重复的child或者group item的位置。