1

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

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

那是:

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

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

我已经看过帖子了

如何在android的父级可扩展列表中添加图像?

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

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

我敢肯定,如果有足够的时间,我也许可以从中弄清楚,但我想看看是否有人以前做过。

我已经实现了我的 ELV 适配器,并且一切都可以编译和运行,现在我准备修改代码来解决这个特殊问题。

谢谢你。

4

1 回答 1

2

android不支持该功能。一种常见的方法是为列表元素创建一个包装器对象。例如,假设您想在列表中显示Cars 和Persons,那么您将执行类似的操作

class ListElement {
  Car car = null;
  Person person = null;
}

在运行时,要么为空,car要么person为空。在您的实施中getView(),您会执行类似的操作,

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

如果你使用你的转换视图(你应该这样做),你必须小心。例如,如果转换视图被夸大为 a Car,并且您应该获得 a 的视图Person。解决这个问题的一种方法是创建一个包含CarPerson视图的超级视图,然后您只需隐藏或显示getView().

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

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

于 2013-01-28T22:00:19.443 回答