5

我尝试使用 ListView.indexOfChild(View view) 方法来检查 ListView 是否包含指定的标题视图,但有时当 ListView 确实包含指定的标题时它会返回 -1。有没有更好的方法来检查这个?

4

1 回答 1

17

如果“标头”是指使用任何一种addHeaderView(...)方法添加的实际标头,则可以使用简单地检索添加的标头数量getHeaderViewsCount()

或者,如果我没记错的话,如果它包含页眉和/或页脚,ListView则将其适配器包装在 a中。HeaderViewListAdapter您可以使用它getHeadersCount()来检索与上述相同的数字。


编辑:如果您想检查是否添加了特定标题,您应该能够查询该标题HeaderViewListAdapter。您将需要某种标准来检查。

例如,如果您的 中有 3 个标题ListView,您可以遍历前三个项目(您可以直接从 中获取它们HeaderListViewAdapter,或者使用ListView'getItemAtPosition(...)方法)并查看是否符合条件。进行这种“匹配”的最简单方法可能是使用addHeaderView(...)也采用Object参数的方法添加标题。您基本上可以提供任何东西来区分多个标题,显然前提是数据对象不同。例如,您可以只传入一个字符串。

有了这些数据,您可以为前 3 个职位调用getItem(...)/getItemAtPosition(...)并检查返回的内容。将字符串用于数据的好处是每个 Java 对象都实现了一个toString()方法,然后您可以利用该方法进行直接.equals(..)比较。

或者,您可以使用反射来获取实际的mHeaderViewInfos成员变量(只是一个ArrayList<ListView.FixedViewInfo>)并将其用于条件逻辑。

于 2012-05-29T19:36:07.040 回答