ExpandableListView:不同的视图组

时间:2013-01-28 21:52:38

标签: android

我正在尝试子类化ExpandableListView,以便我可以添加不同的组。

通过不同的组,我的意思是每个组包含不同的子视图类型(其中所有的孩子在整个组中都是相同的)。

那是:

Group 1
   TextView 1
   TextView 2
   TextView 3
Group 2
   EditText 1
   EditText 2
   EditText 3
...

我尝试在LinearLayout中堆叠两个ELV ontop,但是我想要获得的主要行为(这是我首先使用ELV的唯一原因)是丢失的:每个列表变得独立可滚动的,如果使用包含多个组的单个ELV,它们将一起滚动)。

我已经看过帖子了

How to add image in expandable List in parent in android?

然而,这并不是我想要的。这解决了组内多个不同孩子的问题:

Group 1
    TextView 1
    Image 1
    ----------
    TextView 2
    Image 2
    ...

我确信有足够的时间我可以从中解决这个问题,但我想知道是否有人已经做过这件事。

我已经实现了我的ELV适配器,并且编译好并运行正常,现在我已准备好调整代码来解决这个特殊问题。

谢谢。

1 个答案:

答案 0 :(得分:2)

没有来自android的支持。一种常见的方法是为列表元素创建一个包装器对象。例如,假设您要在列表中显示CarPerson,那么您可以执行类似

的操作
class ListElement {
  Car car = null;
  Person person = null;
}

在运行时,carperson为空。在getView()的实现中,您可以执行类似的操作,

ListElement e = getItem(position);
if (e.car != null) {
  // create view for Car
} else if (e.person != null) {
  // create view for Person
} else {
  // error!
}

如果您使用转换视图(您应该使用),则必须小心。例如,如果转换视图为Car充气,您应该获得Person的视图。处理此问题的方法是创建包含CarPerson视图的超级视图,然后您只需隐藏或显示getView()中的相应部分。

<FrameLayout ...>
  <LinearLayout android:id="@+id/car_layout" ... />
  <LinearLayout android:id="@+id/person_layout" ... />
</FrameLayout>

另一种方法是有两个单独的可扩展ListView